update migrations for catalog
parent
4d460aa318
commit
8759a2a61c
|
|
@ -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
|
||||
|
|
@ -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));
|
||||
Loading…
Reference in New Issue