63 lines
2.2 KiB
PL/PgSQL
63 lines
2.2 KiB
PL/PgSQL
CREATE OR REPLACE 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;
|
|
|
|
CREATE OR REPLACE 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;
|
|
$$;
|
|
|
|
/*
|
|
View to determine the score added by votes from different classes of users. In
|
|
order for songs with no votes to show up in this view (and thus have their
|
|
scores properly calculated), the query must be JOINed to requests, the URL must
|
|
be selected as requests.url rather than votes.requesturl (which is null in the
|
|
case of no votes), and users.is{follower,subscriber} must be COALESCEd to FALSE
|
|
as in the case of no votes, user.* will be NULL.
|
|
*/
|
|
|
|
CREATE OR REPLACE VIEW vote_score_vw AS
|
|
WITH votepoints AS (SELECT normaluservotepoints, followervotepoints, subscribervotepoints FROM config)
|
|
SELECT requests.url AS url,
|
|
COUNT(votes.requesturl) AS count,
|
|
COALESCE(
|
|
SUM(CASE
|
|
WHEN users.isfollower = FALSE AND users.issubscriber = FALSE
|
|
THEN votepoints.normaluservotepoints
|
|
WHEN users.isfollower = TRUE AND users.issubscriber = FALSE
|
|
THEN votepoints.followervotepoints
|
|
WHEN users.issubscriber = TRUE
|
|
THEN votepoints.subscribervotepoints
|
|
END), 0
|
|
) AS votescore
|
|
FROM requests
|
|
LEFT JOIN votes ON votes.requesturl = requests.url
|
|
LEFT JOIN users on votes.userid = users.userid
|
|
LEFT JOIN bans ON users.userid = bans.userid
|
|
CROSS JOIN votepoints
|
|
WHERE bans.userid IS NULL
|
|
GROUP BY url;
|
|
|
|
CREATE OR REPLACE VIEW streamer_user_vw AS
|
|
SELECT users.userid as userid, users.displayname as displayname, users.imageurl as imageurl FROM streamer
|
|
LEFT JOIN users
|
|
ON streamer.userid = users.userid;
|