package core import ( "database/sql" "errors" "fmt" _ "github.com/mattn/go-sqlite3" ) func AddSource(db *sql.DB, name string) error { _, err := db.Exec(` insert into sources (name) values (?) `, name) return err } func DeleteSource(db *sql.DB, name string) error { _, err := db.Exec(` delete from sources where name = ? `, name) return err } func AddItem( db *sql.DB, source string, id string, title string, author string, body string, link string, time int, ) error { _, err := db.Exec(` insert into items (source, id, active, title, author, body, link, time) values (?, ?, ?, ?, ?, ?, ?, ?) `, source, id, true, title, author, body, link, time) return err } // Deactivate an item, returning its previous active state. func DeactivateItem(db *sql.DB, source string, id string) (bool, error) { row := db.QueryRow(` select active from items where source = ? and id = ? `, source, id) var active bool err := row.Scan(&active) if err != nil && errors.Is(err, sql.ErrNoRows) { return false, fmt.Errorf("item %s/%s not found", source, id) } _, err = db.Exec(` update items set active = 0 where source = ? and id = ? `, source, id) if err != nil { return false, err } return active, nil } func GetAllActiveItems(db *sql.DB) ([]Item, error) { rows, err := db.Query(` select source, id, created, active, title, author, body, link, time from items where active <> 0 `) if err != nil { return nil, err } var items []Item for rows.Next() { var item Item rows.Scan(&item.Source, &item.Id, &item.Created, &item.Active, &item.Title, &item.Author, &item.Body, &item.Link, &item.Time) items = append(items, item) } return items, nil } func GetActiveItemsForSource(db *sql.DB, source string) ([]Item, error) { rows, err := db.Query(` select source, id, created, active, title, author, body, link, time from items where source = ? and active <> 0 `, source) if err != nil { return nil, err } var items []Item for rows.Next() { var item Item rows.Scan(&item.Source, &item.Id, &item.Created, &item.Active, &item.Title, &item.Author, &item.Body, &item.Link, &item.Time) items = append(items, item) } return items, nil }