update migrations for catalog

pull/3/head
Adam Veldhousen 2023-05-10 16:48:08 -05:00
parent 4d460aa318
commit 8759a2a61c
Signed by: adam
GPG Key ID: 6DB29003C6DD1E4B
2 changed files with 134 additions and 0 deletions

View File

@ -0,0 +1,112 @@
-- +goose Up
START TRANSACTION;
CREATE SCHEMA IF NOT EXISTS catalog;
CREATE TABLE IF NOT EXISTS catalog.upcoming_auctions (
id SERIAL PRIMARY KEY,
fingerprint VARCHAR(512) NOT NULL UNIQUE,
title VARCHAR(1024) NOT NULL,
description TEXT DEFAULT ''::TEXT NOT NULL,
startts TIMESTAMP NOT NULL,
endts TIMESTAMP,
itemcount INTEGER DEFAULT 0 NOT NULL,
sourcesiteurl VARCHAR(1024) DEFAULT ''::CHARACTER VARYING NOT NULL,
sourcesitename VARCHAR(256) NOT NULL,
sourceurl VARCHAR(1024) NOT NULL,
country VARCHAR(64) NOT NULL,
province VARCHAR(128) NOT NULL
);
CREATE TABLE IF NOT EXISTS catalog.upcoming_auctions_fts (
id SERIAL PRIMARY KEY,
auctionid INTEGER REFERENCES CATALOG.UPCOMING_AUCTIONS,
title VARCHAR(1024) NOT NULL,
description TEXT NOT NULL,
ts tsvector GENERATED ALWAYS AS ((
setweight(to_tsvector('english', (title)::TEXT), 'A') ||
setweight(to_tsvector('english', (description)::TEXT), 'B')
)) STORED
);
CREATE INDEX ts_idx ON catalog.upcoming_auctions_fts USING GIN(ts);
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION catalog.bh_import_auction(
p_fingerprint VARCHAR(512),
p_title VARCHAR(1024),
p_description TEXT DEFAULT '',
p_startts TIMESTAMP,
p_endts TIMESTAMP,
p_itemcount INTEGER DEFAULT 0,
p_sourcesiteurl VARCHAR(1024),
p_sourcesitename VARCHAR(256),
p_sourceurl VARCHAR(1024),
p_country VARCHAR(64),
p_province VARCHAR(128))
RETURNS integer
LANGUAGE plpgsql AS $BODY$
DECLARE
auction_id integer;
BEGIN
INSERT INTO catalog.upcoming_auctions (
fingerprint,
title,
description,
startts,
endts,
itemcount,
sourcesiteurl,
sourcesitename,
sourceurl,
country,
province
) VALUES (
p_fingerprint,
p_title,
p_description,
p_startts,
p_endts,
p_itemcount,
p_sourcesiteurl,
p_sourcesitename,
p_sourceurl,
p_country,
p_province
) RETURN id INTO auction_id;
INSERT INTO catalog.upcoming_auctions_fts (
auctionid,
title,
description
) VALUES ( auction_id, p_title, p_description);
return auction_id;
END;
$BODY$;
-- +goose StatementEnd
-- +goose StatementBegin
DO
$do$
BEGIN
IF NOT EXISTS (
SELECT FROM pg_catalog.pg_roles -- SELECT list can be empty for this
WHERE rolname = 'catalog-service') THEN
CREATE USER "catalog-service" WITH PASSWORD 'catalog-service';
END IF;
END
$do$;
-- +goose StatementEnd
GRANT CONNECT ON DATABASE bh to "catalog-service";
GRANT USAGE ON SCHEMA catalog TO "catalog-service";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA catalog TO "catalog-service";
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA catalog TO "catalog-service";
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA catalog TO "catalog-service";
COMMIT;
-- +goose Down

View File

@ -0,0 +1,22 @@
-- name: GetUpcoming :many
SELECT ua.*
FROM catalog.upcoming_auctions ua
LEFT JOIN catalog.upcoming_auctions_fts fts on ua.id = fts.auction_id
WHERE fts.ts @@ phraseto_tsquery($1)
ORDER BY ts_rank(fts.ts, phraseto_tsquery($1)) DESC
LIMIT $2;
-- name: ImportAuction :one
SELECT catalog.bh_import_auction(
sqlc.arg(fingerprint),
sqlc.arg(title),
sqlc.arg(description),
sqlc.arg(startTs),
sqlc.arg(endTs),
sqlc.arg(itemCount),
sqlc.arg(sourceSiteURL),
sqlc.arg(sourceSiteName),
sqlc.arg(sourceURL),
sqlc.arg(country),
sqlc.arg(province));