package dbi import ( "context" "database/sql" "fmt" "strings" "time" "github.com/google/uuid" ) type Scholarship struct { UID string `json:"uid"` Citation string `json:"citation"` Hyperlink string `json:"hyperlink"` Status string `json:"status"` Created string `json:"created"` Modified string `json:"modified"` Username string `json:"username"` } func CreateScholarship(conn *sql.Conn, s *Scholarship) error { if s.UID == "" { s.UID = strings.ReplaceAll(uuid.New().String(), "-", "") } now := time.Now().Format("2006-01-02 15:04:05") s.Created = now s.Modified = now _, err := conn.ExecContext(context.Background(), `INSERT INTO scholarship (UID, Citation, Hyperlink, Status, Created, Modified, Username) VALUES (?, ?, ?, ?, ?, ?, ?)`, s.UID, s.Citation, s.Hyperlink, s.Status, s.Created, s.Modified, s.Username, ) return err } func GetScholarship(conn *sql.Conn, uid string) (Scholarship, error) { row := conn.QueryRowContext(context.Background(), `SELECT UID, Citation, Hyperlink, Status, Created, Modified, Username FROM scholarship WHERE UID = ?`, uid, ) var s Scholarship err := row.Scan(&s.UID, &s.Citation, &s.Hyperlink, &s.Status, &s.Created, &s.Modified, &s.Username) if err == sql.ErrNoRows { return Scholarship{}, fmt.Errorf("scholarship %q not found", uid) } return s, err } func UpdateScholarship(conn *sql.Conn, s *Scholarship) error { s.Modified = time.Now().Format("2006-01-02 15:04:05") _, err := conn.ExecContext(context.Background(), `UPDATE scholarship SET Citation = ?, Hyperlink = ?, Status = ?, Modified = ?, Username = ? WHERE UID = ?`, s.Citation, s.Hyperlink, s.Status, s.Modified, s.Username, s.UID, ) return err } func DeleteScholarship(conn *sql.Conn, uid string) error { _, err := conn.ExecContext(context.Background(), `DELETE FROM scholarship WHERE UID = ?`, uid, ) return err } func GetScholarshipsForUsername(conn *sql.Conn, username string) ([]Scholarship, error) { rows, err := conn.QueryContext(context.Background(), `SELECT UID, Citation, Hyperlink, Status, Created, Modified, Username FROM scholarship WHERE Username = ?`, username, ) if err != nil { return nil, err } defer rows.Close() var results []Scholarship for rows.Next() { var s Scholarship if err := rows.Scan(&s.UID, &s.Citation, &s.Hyperlink, &s.Status, &s.Created, &s.Modified, &s.Username); err != nil { return nil, err } results = append(results, s) } return results, rows.Err() }