50 lines
1.4 KiB
PL/PgSQL
50 lines
1.4 KiB
PL/PgSQL
BEGIN;
|
|
|
|
--UPDATE version SET minor = 5;
|
|
|
|
CREATE OR REPLACE PROCEDURE update_vote_points(normaluser int, follower int, subscriber int)
|
|
LANGUAGE SQL
|
|
AS $$
|
|
UPDATE config SET normaluservotepoints = normaluser,
|
|
followervotepoints = follower, subscribervotepoints = subscriber;
|
|
CALL update_scores();
|
|
$$;
|
|
|
|
CREATE TABLE follows (
|
|
userid integer,
|
|
PRIMARY KEY (userid)
|
|
);
|
|
|
|
CREATE TABLE subscriptions (
|
|
userid integer,
|
|
PRIMARY KEY (userid)
|
|
);
|
|
|
|
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 follows.userid IS NULL AND subscriptions.userid IS NULL
|
|
THEN votepoints.normaluservotepoints
|
|
WHEN follows.userid IS NOT NULL AND subscriptions.userid IS NULL
|
|
THEN votepoints.followervotepoints
|
|
WHEN subscriptions.userid IS NOT NULL
|
|
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
|
|
LEFT JOIN follows ON users.userid = follows.userid
|
|
LEFT JOIN subscriptions ON users.userid = subscriptions.userid
|
|
CROSS JOIN votepoints
|
|
WHERE bans.userid IS NULL
|
|
GROUP BY url;
|
|
|
|
ALTER TABLE users DROP COLUMN isfollower, DROP COLUMN issubscriber;
|
|
|
|
COMMIT;
|