diff --git a/internal/database/migrations/20240428201449_goqite.sql b/internal/database/migrations/20240428201449_goqite.sql new file mode 100644 index 0000000..10f46a6 --- /dev/null +++ b/internal/database/migrations/20240428201449_goqite.sql @@ -0,0 +1,25 @@ +-- +goose Up +-- +goose StatementBegin +create table goqite ( + id text primary key default ('m_' || lower(hex(randomblob(16)))), + created text not null default (strftime('%Y-%m-%dT%H:%M:%fZ')), + updated text not null default (strftime('%Y-%m-%dT%H:%M:%fZ')), + queue text not null, + body blob not null, + timeout text not null default (strftime('%Y-%m-%dT%H:%M:%fZ')), + received integer not null default 0 +) strict; + +create trigger goqite_updated_timestamp after update on goqite begin + update goqite set updated = strftime('%Y-%m-%dT%H:%M:%fZ') where id = old.id; +end; + +create index goqite_queue_created_idx on goqite (queue, created); +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TABLE goqite +DROP INDEX goqite_queue_created_idx +DROP TRIGGER goqite_updated_timestamp +-- +goose StatementEnd diff --git a/internal/services/queue.go b/internal/services/queue.go new file mode 100644 index 0000000..80c8c7f --- /dev/null +++ b/internal/services/queue.go @@ -0,0 +1,23 @@ +package services + +import ( + "database/sql" + + "github.com/maragudk/goqite" +) + +type queues struct { + repos RepositoryService + + RssIndex goqite.Queue +} + +func NewQueues(conn *sql.DB) queues { + return queues{ + repos: NewRepositoryService(conn), + RssIndex: *goqite.New(goqite.NewOpts{ + DB: conn, + Name: "rss", + }), + } +}