You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.4 KiB
Go

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()
}