1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
 2//
 3// SPDX-License-Identifier: Apache-2.0
 4
 5package db
 6
 7import "database/sql"
 8
 9// AddRelease adds a release for a project with a given URL to the database
10
11// DeleteRelease deletes a release for a project with a given URL from the database
12
13// UpdateRelease updates a release for a project with a given URL in the database
14
15// UpsertRelease adds or updates a release for a project with a given URL in the
16// database
17func UpsertRelease(db *sql.DB, projectURL, releaseURL, tag, content, date string) error {
18	_, err := db.Exec(`INSERT INTO releases (project_url, release_url, tag, content, date)
19		VALUES (?, ?, ?, ?, ?)
20		ON CONFLICT(release_url) DO 
21			UPDATE SET
22				release_url = excluded.release_url,
23				content = excluded.content,
24				tag = excluded.tag,
25				content = excluded.content,
26				date = excluded.date;`, projectURL, releaseURL, tag, content, date)
27	return err
28}
29
30// GetRelease returns a release for a project with a given URL from the database
31
32// GetReleases returns all releases for a project with a given URL from the database
33func GetReleases(db *sql.DB, projectURL string) ([]map[string]string, error) {
34	rows, err := db.Query(`SELECT project_url, release_url, tag, content, date FROM releases WHERE project_url = ?`, projectURL)
35	if err != nil {
36		return nil, err
37	}
38	defer rows.Close()
39
40	releases := make([]map[string]string, 0)
41	for rows.Next() {
42		var (
43			projectURL string
44			releaseURL string
45			tag        string
46			content    string
47			date       string
48		)
49		err := rows.Scan(&projectURL, &releaseURL, &tag, &content, &date)
50		if err != nil {
51			return nil, err
52		}
53		releases = append(releases, map[string]string{
54			"projectURL": projectURL,
55			"releaseURL": releaseURL,
56			"tag":        tag,
57			"content":    content,
58			"date":       date,
59		})
60	}
61	return releases, nil
62}