~cytrogen/masto-fe

ref: 9e59186f78a1b170d4d15197a4bb439f66fd7e8f masto-fe/db/views/follow_recommendations_v01.sql -rw-r--r-- 1.4 KiB
9e59186f — dependabot[bot] Bump glob from 10.2.2 to 10.2.6 (#25083) 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SELECT
  account_id,
  sum(rank) AS rank,
  array_agg(reason) AS reason
FROM (
  SELECT
    accounts.id AS account_id,
    count(follows.id) / (1.0 + count(follows.id)) AS rank,
    'most_followed' AS reason
  FROM follows
  INNER JOIN accounts ON accounts.id = follows.target_account_id
  INNER JOIN users ON users.account_id = follows.account_id
  WHERE users.current_sign_in_at >= (now() - interval '30 days')
    AND accounts.suspended_at IS NULL
    AND accounts.moved_to_account_id IS NULL
    AND accounts.silenced_at IS NULL
    AND accounts.locked = 'f'
    AND accounts.discoverable = 't'
  GROUP BY accounts.id
  HAVING count(follows.id) >= 5
  UNION ALL
  SELECT accounts.id AS account_id,
         sum(status_stats.reblogs_count + status_stats.favourites_count) / (1.0 + sum(status_stats.reblogs_count + status_stats.favourites_count)) AS rank,
         'most_interactions' AS reason
  FROM status_stats
  INNER JOIN statuses ON statuses.id = status_stats.status_id
  INNER JOIN accounts ON accounts.id = statuses.account_id
  WHERE statuses.id >= ((date_part('epoch', now() - interval '30 days') * 1000)::bigint << 16)
    AND accounts.suspended_at IS NULL
    AND accounts.moved_to_account_id IS NULL
    AND accounts.silenced_at IS NULL
    AND accounts.locked = 'f'
    AND accounts.discoverable = 't'
  GROUP BY accounts.id
  HAVING sum(status_stats.reblogs_count + status_stats.favourites_count) >= 5
) t0
GROUP BY account_id
ORDER BY rank DESC