learn-request-queue/db/upgrade/v0.4-0.5.sql

54 lines
1.5 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
AND votes.userid IS NOT 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 bans ON votes.userid = bans.userid
LEFT JOIN follows ON votes.userid = follows.userid
LEFT JOIN subscriptions ON votes.userid = subscriptions.userid
CROSS JOIN votepoints
WHERE bans.userid IS NULL
GROUP BY url;
ALTER TABLE users DROP COLUMN isfollower, DROP COLUMN issubscriber;
INSERT INTO cron (jobName,runInterval) VALUES
('processFollows','30 minutes'),
('processSubscriptions','30 minutes');
COMMIT;