Restructure DB in preparation for follower/subscriber implementation
- Remove user.is{follower,subscriber}, replacing with tables follows and subscriptions - Update vote_score_vw to reflect new structure - Add db upgrade scriptmaster
parent
60defb7ea6
commit
dbe7e4c52d
|
@ -2,7 +2,5 @@ CREATE TABLE users (
|
||||||
userId int NOT NULL,
|
userId int NOT NULL,
|
||||||
displayName varchar NOT NULL,
|
displayName varchar NOT NULL,
|
||||||
imageUrl varchar,
|
imageUrl varchar,
|
||||||
isFollower boolean NOT NULL DEFAULT FALSE,
|
|
||||||
isSubscriber boolean NOT NULL DEFAULT FALSE,
|
|
||||||
PRIMARY KEY (userId)
|
PRIMARY KEY (userId)
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
CREATE TABLE follows (
|
||||||
|
userid integer,
|
||||||
|
PRIMARY KEY (userid)
|
||||||
|
)
|
|
@ -0,0 +1,4 @@
|
||||||
|
CREATE TABLE subscriptions (
|
||||||
|
userid integer,
|
||||||
|
PRIMARY KEY (userid)
|
||||||
|
)
|
|
@ -40,11 +40,11 @@ CREATE OR REPLACE VIEW vote_score_vw AS
|
||||||
COUNT(votes.requesturl) AS count,
|
COUNT(votes.requesturl) AS count,
|
||||||
COALESCE(
|
COALESCE(
|
||||||
SUM(CASE
|
SUM(CASE
|
||||||
WHEN users.isfollower = FALSE AND users.issubscriber = FALSE
|
WHEN follows.userid IS NULL AND subscriptions.userid IS NULL
|
||||||
THEN votepoints.normaluservotepoints
|
THEN votepoints.normaluservotepoints
|
||||||
WHEN users.isfollower = TRUE AND users.issubscriber = FALSE
|
WHEN follows.userid IS NOT NULL AND subscriptions.userid IS NULL
|
||||||
THEN votepoints.followervotepoints
|
THEN votepoints.followervotepoints
|
||||||
WHEN users.issubscriber = TRUE
|
WHEN subscriptions.userid IS NOT NULL
|
||||||
THEN votepoints.subscribervotepoints
|
THEN votepoints.subscribervotepoints
|
||||||
END), 0
|
END), 0
|
||||||
) AS votescore
|
) AS votescore
|
||||||
|
@ -52,6 +52,8 @@ CREATE OR REPLACE VIEW vote_score_vw AS
|
||||||
LEFT JOIN votes ON votes.requesturl = requests.url
|
LEFT JOIN votes ON votes.requesturl = requests.url
|
||||||
LEFT JOIN users on votes.userid = users.userid
|
LEFT JOIN users on votes.userid = users.userid
|
||||||
LEFT JOIN bans ON users.userid = bans.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
|
CROSS JOIN votepoints
|
||||||
WHERE bans.userid IS NULL
|
WHERE bans.userid IS NULL
|
||||||
GROUP BY url;
|
GROUP BY url;
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
INSERT INTO users (userid,displayName,isFollower,isSubscriber) VALUES
|
INSERT INTO users (userid,displayName) VALUES
|
||||||
(001,'TestUser',false,false),
|
(001,'TestUser'),
|
||||||
(002,'TestFollower',true,false),
|
(002,'TestFollower'),
|
||||||
(003,'TestSubscriber',true,true),
|
(003,'TestSubscriber'),
|
||||||
(004,'TestSubNonFollower',false,true);
|
(004,'TestSubNonFollower');
|
||||||
|
|
||||||
|
INSERT INTO follows (userid) VALUES
|
||||||
|
(002),
|
||||||
|
(003);
|
||||||
|
|
||||||
|
INSERT INTO subscriptions (userid) VALUES
|
||||||
|
(003),
|
||||||
|
(004);
|
||||||
|
|
||||||
CALL add_request('https://www.youtube.com/watch?v=dQw4w9WgXcQ',001);
|
CALL add_request('https://www.youtube.com/watch?v=dQw4w9WgXcQ',001);
|
||||||
CALL add_request('https://www.youtube.com/watch?v=C5oeWHngDS4',002);
|
CALL add_request('https://www.youtube.com/watch?v=C5oeWHngDS4',002);
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
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;
|
Loading…
Reference in New Issue