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;
