project.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 // DeleteProject deletes a project from the database 13 func DeleteProject(db *sql.DB, mu *sync.Mutex, id string) error { 14 mu.Lock() 15 defer mu.Unlock() 16 _, err := db.Exec("DELETE FROM projects WHERE id = ?", id) 17 if err != nil { 18 return err 19 } 20 _, err = db.Exec("DELETE FROM releases WHERE project_id = ?", id) 21 return err 22 } 23 24 // GetProject returns a project from the database 25 func GetProject(db *sql.DB, id string) (map[string]string, error) { 26 var name, forge, url, version string 27 err := db.QueryRow("SELECT name, forge, url, version FROM projects WHERE id = ?", id).Scan(&name, &forge, &url, &version) 28 if err != nil { 29 return nil, err 30 } 31 project := map[string]string{ 32 "id": id, 33 "name": name, 34 "url": url, 35 "forge": forge, 36 "version": version, 37 } 38 return project, nil 39 } 40 41 // UpsertProject adds or updates a project in the database 42 func UpsertProject(db *sql.DB, mu *sync.Mutex, id, url, name, forge, running string) error { 43 mu.Lock() 44 defer mu.Unlock() 45 _, err := db.Exec(`INSERT INTO projects (id, url, name, forge, version) 46 VALUES (?, ?, ?, ?, ?) 47 ON CONFLICT(id) DO 48 UPDATE SET 49 name = excluded.name, 50 forge = excluded.forge, 51 version = excluded.version;`, id, url, name, forge, running) 52 return err 53 } 54 55 // GetProjects returns a list of all projects in the database 56 func GetProjects(db *sql.DB) ([]map[string]string, error) { 57 rows, err := db.Query("SELECT id, name, url, forge, version FROM projects") 58 if err != nil { 59 return nil, err 60 } 61 defer rows.Close() 62 63 var projects []map[string]string 64 for rows.Next() { 65 var id, name, url, forge, version string 66 err = rows.Scan(&id, &name, &url, &forge, &version) 67 if err != nil { 68 return nil, err 69 } 70 project := map[string]string{ 71 "id": id, 72 "name": name, 73 "url": url, 74 "forge": forge, 75 "version": version, 76 } 77 projects = append(projects, project) 78 } 79 return projects, nil 80 }