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}