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}