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