@@ -21,15 +21,16 @@ export class LeaderboardRepository {
21
21
COALESCE(SUM(ts.today_view), 0) AS total_views,
22
22
COALESCE(SUM(ts.today_like), 0) AS total_likes,
23
23
COUNT(DISTINCT CASE WHEN p.is_active = true THEN p.id END) AS total_posts,
24
- SUM(COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, COALESCE(ts.today_view, 0) )) AS view_diff,
25
- SUM(COALESCE(ts.today_like, 0) - COALESCE(ss.start_like, COALESCE(ts.today_like, 0) )) AS like_diff,
24
+ SUM(COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, 0 )) AS view_diff,
25
+ SUM(COALESCE(ts.today_like, 0) - COALESCE(ss.start_like, 0 )) AS like_diff,
26
26
COUNT(DISTINCT CASE WHEN p.released_at >= '${ pastDateKST } ' AND p.is_active = true THEN p.id END) AS post_diff
27
27
FROM users_user u
28
28
LEFT JOIN posts_post p ON p.user_id = u.id
29
29
LEFT JOIN today_stats ts ON ts.post_id = p.id
30
30
LEFT JOIN start_stats ss ON ss.post_id = p.id
31
31
WHERE u.username IS NOT NULL
32
32
GROUP BY u.id, u.email, u.username
33
+ HAVING SUM(COALESCE(ts.today_view, 0)) != SUM(COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, 0))
33
34
ORDER BY ${ this . SORT_COL_MAPPING [ sort ] } DESC, u.id
34
35
LIMIT $1;
35
36
` ;
@@ -44,6 +45,7 @@ export class LeaderboardRepository {
44
45
45
46
async getPostLeaderboard ( sort : PostLeaderboardSortType , dateRange : number , limit : number ) {
46
47
try {
48
+ const pastDateKST = getKSTDateStringWithOffset ( - dateRange * 24 * 60 ) ;
47
49
const cteQuery = this . buildLeaderboardCteQuery ( dateRange ) ;
48
50
49
51
const query = `
@@ -56,13 +58,18 @@ export class LeaderboardRepository {
56
58
u.username AS username,
57
59
COALESCE(ts.today_view, 0) AS total_views,
58
60
COALESCE(ts.today_like, 0) AS total_likes,
59
- COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, COALESCE(ts.today_view, 0) ) AS view_diff,
60
- COALESCE(ts.today_like, 0) - COALESCE(ss.start_like, COALESCE(ts.today_like, 0) ) AS like_diff
61
+ COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, 0 ) AS view_diff,
62
+ COALESCE(ts.today_like, 0) - COALESCE(ss.start_like, 0 ) AS like_diff
61
63
FROM posts_post p
62
64
LEFT JOIN users_user u ON u.id = p.user_id
63
65
LEFT JOIN today_stats ts ON ts.post_id = p.id
64
66
LEFT JOIN start_stats ss ON ss.post_id = p.id
65
67
WHERE p.is_active = true
68
+ AND (
69
+ p.released_at >= '${ pastDateKST } '
70
+ OR
71
+ COALESCE(ts.today_view, 0) != COALESCE(ts.today_view, 0) - COALESCE(ss.start_view, 0)
72
+ )
66
73
ORDER BY ${ this . SORT_COL_MAPPING [ sort ] } DESC, p.id
67
74
LIMIT $1;
68
75
` ;
@@ -89,17 +96,15 @@ export class LeaderboardRepository {
89
96
daily_view_count AS today_view,
90
97
daily_like_count AS today_like
91
98
FROM posts_postdailystatistics
92
- WHERE date <= '${ nowDateKST } '
93
- ORDER BY post_id, date DESC
99
+ WHERE date = '${ nowDateKST } '
94
100
),
95
101
start_stats AS (
96
102
SELECT DISTINCT ON (post_id)
97
103
post_id,
98
104
daily_view_count AS start_view,
99
105
daily_like_count AS start_like
100
106
FROM posts_postdailystatistics
101
- WHERE date >= '${ pastDateKST } '
102
- ORDER BY post_id, date ASC
107
+ WHERE date = '${ pastDateKST } '
103
108
)
104
109
` ;
105
110
}
0 commit comments