package dbi import ( "context" "database/sql" "fmt" ) type Activity struct { UID string `json:"uid"` Title string `json:"title"` Description string `json:"description"` Hyperlink string `json:"hyperlink"` Status string `json:"status"` Created string `json:"created"` Modified string `json:"modified"` Username string `json:"username"` } func CreateActivity(conn *sql.Conn, a *Activity) error { if a.UID == "" { a.UID = GenUUID() } now := GetNow() a.Created = now a.Modified = now _, err := conn.ExecContext(context.Background(), `INSERT INTO activities (UID, Title, Description, Hyperlink, Status, Created, Modified, Username) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, a.UID, a.Title, a.Description, a.Hyperlink, a.Status, a.Created, a.Modified, a.Username, ) return err } func GetActivity(conn *sql.Conn, uid string) (Activity, error) { row := conn.QueryRowContext(context.Background(), `SELECT UID, Title, Description, Hyperlink, Status, Created, Modified, Username FROM activities WHERE UID = ?`, uid, ) var a Activity err := row.Scan(&a.UID, &a.Title, &a.Description, &a.Hyperlink, &a.Status, &a.Created, &a.Modified, &a.Username) if err == sql.ErrNoRows { return Activity{}, fmt.Errorf("activity %q not found", uid) } return a, err } func UpdateActivity(conn *sql.Conn, a *Activity) error { a.Modified = GetNow() _, err := conn.ExecContext(context.Background(), `UPDATE activities SET Title = ?, Description = ?, Hyperlink = ?, Status = ?, Modified = ?, Username = ? WHERE UID = ?`, a.Title, a.Description, a.Hyperlink, a.Status, a.Modified, a.Username, a.UID, ) return err } func DeleteActivity(conn *sql.Conn, uid string) error { _, err := conn.ExecContext(context.Background(), `DELETE FROM activities WHERE UID = ?`, uid, ) return err } func GetActivitiesForUsername(conn *sql.Conn, username string) ([]Activity, error) { rows, err := conn.QueryContext(context.Background(), `SELECT UID, Title, Description, Hyperlink, Status, Created, Modified, Username FROM activities WHERE Username = ?`, username, ) if err != nil { return nil, err } defer rows.Close() var results []Activity for rows.Next() { var a Activity if err := rows.Scan(&a.UID, &a.Title, &a.Description, &a.Hyperlink, &a.Status, &a.Created, &a.Modified, &a.Username); err != nil { return nil, err } results = append(results, a) } return results, rows.Err() }