]> Untitled Git - lemmy.git/blob - migrations/2019-08-11-000918_add_nsfw_columns/up.sql
add enable_federated_downvotes site option
[lemmy.git] / migrations / 2019-08-11-000918_add_nsfw_columns / up.sql
1 ALTER TABLE community
2     ADD COLUMN nsfw boolean DEFAULT FALSE NOT NULL;
3
4 ALTER TABLE post
5     ADD COLUMN nsfw boolean DEFAULT FALSE NOT NULL;
6
7 ALTER TABLE user_
8     ADD COLUMN show_nsfw boolean DEFAULT FALSE NOT NULL;
9
10 -- The views
11 DROP VIEW community_view;
12
13 CREATE VIEW community_view AS
14 with all_community AS (
15     SELECT
16         *,
17         (
18             SELECT
19                 name
20             FROM
21                 user_ u
22             WHERE
23                 c.creator_id = u.id) AS creator_name,
24         (
25             SELECT
26                 name
27             FROM
28                 category ct
29             WHERE
30                 c.category_id = ct.id) AS category_name,
31         (
32             SELECT
33                 count(*)
34             FROM
35                 community_follower cf
36             WHERE
37                 cf.community_id = c.id) AS number_of_subscribers,
38         (
39             SELECT
40                 count(*)
41             FROM
42                 post p
43             WHERE
44                 p.community_id = c.id) AS number_of_posts,
45         (
46             SELECT
47                 count(*)
48             FROM
49                 comment co,
50                 post p
51             WHERE
52                 c.id = p.community_id
53                 AND p.id = co.post_id) AS number_of_comments,
54         hot_rank ((
55             SELECT
56                 count(*)
57             FROM community_follower cf
58             WHERE
59                 cf.community_id = c.id), c.published) AS hot_rank
60 FROM
61     community c
62 )
63 SELECT
64     ac.*,
65     u.id AS user_id,
66     (
67         SELECT
68             cf.id::boolean
69         FROM
70             community_follower cf
71         WHERE
72             u.id = cf.user_id
73             AND ac.id = cf.community_id) AS subscribed
74 FROM
75     user_ u
76     CROSS JOIN all_community ac
77 UNION ALL
78 SELECT
79     ac.*,
80     NULL AS user_id,
81     NULL AS subscribed
82 FROM
83     all_community ac;
84
85 -- Post view
86 DROP VIEW post_view;
87
88 CREATE VIEW post_view AS
89 with all_post AS (
90     SELECT
91         p.*,
92         (
93             SELECT
94                 name
95             FROM
96                 user_
97             WHERE
98                 p.creator_id = user_.id) AS creator_name,
99         (
100             SELECT
101                 name
102             FROM
103                 community
104             WHERE
105                 p.community_id = community.id) AS community_name,
106         (
107             SELECT
108                 removed
109             FROM
110                 community c
111             WHERE
112                 p.community_id = c.id) AS community_removed,
113         (
114             SELECT
115                 deleted
116             FROM
117                 community c
118             WHERE
119                 p.community_id = c.id) AS community_deleted,
120         (
121             SELECT
122                 nsfw
123             FROM
124                 community c
125             WHERE
126                 p.community_id = c.id) AS community_nsfw,
127         (
128             SELECT
129                 count(*)
130             FROM
131                 comment
132             WHERE
133                 comment.post_id = p.id) AS number_of_comments,
134         coalesce(sum(pl.score), 0) AS score,
135         count(
136             CASE WHEN pl.score = 1 THEN
137                 1
138             ELSE
139                 NULL
140             END) AS upvotes,
141         count(
142             CASE WHEN pl.score = - 1 THEN
143                 1
144             ELSE
145                 NULL
146             END) AS downvotes,
147         hot_rank (coalesce(sum(pl.score), 0), p.published) AS hot_rank
148     FROM
149         post p
150         LEFT JOIN post_like pl ON p.id = pl.post_id
151     GROUP BY
152         p.id
153 )
154 SELECT
155     ap.*,
156     u.id AS user_id,
157     coalesce(pl.score, 0) AS my_vote,
158     (
159         SELECT
160             cf.id::bool
161         FROM
162             community_follower cf
163         WHERE
164             u.id = cf.user_id
165             AND cf.community_id = ap.community_id) AS subscribed,
166     (
167         SELECT
168             pr.id::bool
169         FROM
170             post_read pr
171         WHERE
172             u.id = pr.user_id
173             AND pr.post_id = ap.id) AS read,
174     (
175         SELECT
176             ps.id::bool
177         FROM
178             post_saved ps
179         WHERE
180             u.id = ps.user_id
181             AND ps.post_id = ap.id) AS saved
182 FROM
183     user_ u
184     CROSS JOIN all_post ap
185     LEFT JOIN post_like pl ON u.id = pl.user_id
186         AND ap.id = pl.post_id
187     UNION ALL
188     SELECT
189         ap.*,
190         NULL AS user_id,
191         NULL AS my_vote,
192         NULL AS subscribed,
193         NULL AS read,
194         NULL AS saved
195     FROM
196         all_post ap;
197