52 lines
1.6 KiB
PL/PgSQL
52 lines
1.6 KiB
PL/PgSQL
BEGIN;
|
|
|
|
UPDATE version SET minor = 2;
|
|
|
|
CREATE TABLE requestMetadata (
|
|
url varchar NOT NULL UNIQUE,
|
|
videoTitle varchar DEFAULT NULL,
|
|
PRIMARY KEY (url),
|
|
FOREIGN KEY (url) REFERENCES requests(url) ON DELETE CASCADE
|
|
);
|
|
|
|
DROP VIEW requests_vw;
|
|
CREATE VIEW requests_vw AS
|
|
SELECT url,COALESCE(videoTitle,url) AS title,displayName AS requester,imageUrl,state,score,reqTimestamp FROM requests
|
|
JOIN requestMetadata USING (url)
|
|
JOIN scores USING (url)
|
|
JOIN users ON requests.requester = users.userid
|
|
ORDER BY score DESC, reqTimestamp ASC;
|
|
|
|
DROP FUNCTION get_requests_voted;
|
|
CREATE FUNCTION get_requests_voted(votinguserid int)
|
|
RETURNS TABLE (
|
|
url varchar,
|
|
title varchar,
|
|
requester varchar,
|
|
imageUrl varchar,
|
|
state varchar,
|
|
score int,
|
|
reqTimestamp timestamptz,
|
|
voted bool
|
|
)
|
|
LANGUAGE SQL
|
|
AS $$
|
|
SELECT url,title,requester,imageUrl,state,score,reqTimestamp,
|
|
(CASE WHEN votes.userid IS NULL THEN FALSE ELSE TRUE END) AS voted
|
|
FROM requests_vw
|
|
LEFT JOIN votes ON (requests_vw.url = votes.requesturl AND votes.userid = votinguserid)
|
|
ORDER BY score DESC, reqTimestamp ASC;
|
|
$$;
|
|
|
|
CREATE OR REPLACE PROCEDURE add_request(url varchar,requester int)
|
|
LANGUAGE SQL
|
|
AS $$
|
|
INSERT INTO requests (url,requester) VALUES (url,requester);
|
|
INSERT INTO requestMetadata (url) VALUES (url);
|
|
INSERT INTO scores (url) VALUES (url);
|
|
INSERT INTO votes (requesturl,userid) VALUES (url,requester);
|
|
CALL update_scores();
|
|
$$;
|
|
|
|
COMMIT;
|