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