1 -- Rank = ScaleFactor * sign(Score) * log(1 + abs(Score)) / (Time + 2)^Gravity
2 CREATE OR REPLACE FUNCTION hot_rank (score numeric, published timestamp without time zone)
6 -- hours_diff:=EXTRACT(EPOCH FROM (timezone('utc',now()) - published))/3600
7 RETURN floor(10000 * log(greatest (1, score + 3)) / power(((EXTRACT(EPOCH FROM (timezone('utc', now()) - published)) / 3600) + 2), 1.8))::integer;
12 CREATE VIEW post_view AS
22 p.creator_id = user_.id) AS creator_name,
29 p.community_id = community.id) AS community_name,
36 p.community_id = c.id) AS community_removed,
43 comment.post_id = p.id) AS number_of_comments,
44 coalesce(sum(pl.score), 0) AS score,
46 CASE WHEN pl.score = 1 THEN
52 CASE WHEN pl.score = - 1 THEN
57 hot_rank (coalesce(sum(pl.score), 0), p.published) AS hot_rank
60 LEFT JOIN post_like pl ON p.id = pl.post_id
67 coalesce(pl.score, 0) AS my_vote,
75 AND cf.community_id = ap.community_id) AS subscribed,
83 AND pr.post_id = ap.id) AS read,
91 AND ps.post_id = ap.id) AS saved
94 CROSS JOIN all_post ap
95 LEFT JOIN post_like pl ON u.id = pl.user_id
96 AND ap.id = pl.post_id