diff --git a/spindle/db/db.go b/spindle/db/db.go --- a/spindle/db/db.go +++ b/spindle/db/db.go @@ -26,6 +26,11 @@ pragma auto_vacuum = incremental; pragma busy_timeout = 5000; + create table if not exists _jetstream ( + id integer primary key autoincrement, + last_time_us integer not null + ); + create table if not exists known_dids ( did text primary key ); diff --git a/spindle/db/known_dids.go b/spindle/db/known_dids.go new file mode 100644 --- /dev/null +++ b/spindle/db/known_dids.go @@ -0,0 +1,44 @@ +package db + +func (d *DB) AddDid(did string) error { + _, err := d.Exec(`insert or ignore into known_dids (did) values (?)`, did) + return err +} + +func (d *DB) RemoveDid(did string) error { + _, err := d.Exec(`delete from known_dids where did = ?`, did) + return err +} + +func (d *DB) GetAllDids() ([]string, error) { + var dids []string + + rows, err := d.Query(`select did from known_dids`) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var did string + if err := rows.Scan(&did); err != nil { + return nil, err + } + dids = append(dids, did) + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return dids, nil +} + +func (d *DB) HasKnownDids() bool { + var count int + err := d.QueryRow(`select count(*) from known_dids`).Scan(&count) + if err != nil { + return false + } + return count > 0 +}