@@ -8,9 +8,12 @@ import (
88 "github.com/jackc/pgx/v5"
99)
1010
11- // todo: some dedupe stuff
11+ // todo: time range beyond 30 days
12+ // - how + when to expand time range,
13+ // - how to de-dupe items from appearing twice when expanding time range... is tricky
1214func (app * ApiServer ) v1UsersFeed (c * fiber.Ctx ) error {
1315 myId := app .getMyId (c )
16+
1417 sql := `
1518 WITH
1619 follow_set AS (
@@ -41,7 +44,8 @@ func (app *ApiServer) v1UsersFeed(c *fiber.Ctx) error {
4144 AND playlists.is_delete = false
4245 AND playlists.is_private = false
4346 WHERE
44- reposts.created_at < @before
47+ @filter in ('all', 'repost')
48+ AND reposts.created_at < @before
4549 AND reposts.created_at >= @before - INTERVAL '30 DAYS'
4650 AND reposts.is_delete = false
4751 AND (tracks.track_id IS NOT NULL OR playlists.playlist_id IS NOT NULL)
@@ -57,11 +61,12 @@ func (app *ApiServer) v1UsersFeed(c *fiber.Ctx) error {
5761 created_at
5862 from tracks
5963 join follow_set on owner_id = user_id
60- where created_at < @before
61- and created_at >= @before::timestamp - INTERVAL '30 DAYS'
62- and is_unlisted = false
63- and is_delete = false
64- and stem_of is null
64+ where @filter in ('all', 'original')
65+ AND created_at < @before
66+ AND created_at >= @before::timestamp - INTERVAL '30 DAYS'
67+ AND is_unlisted = false
68+ AND is_delete = false
69+ AND stem_of is null
6570 )
6671
6772 UNION ALL
@@ -73,9 +78,10 @@ func (app *ApiServer) v1UsersFeed(c *fiber.Ctx) error {
7378 created_at
7479 from playlists
7580 join follow_set on playlist_owner_id = user_id
76- where created_at < @before
77- and created_at >= @before - INTERVAL '30 DAYS'
78- and is_delete = false
81+ where @filter in ('all', 'original')
82+ AND created_at < @before
83+ AND created_at >= @before - INTERVAL '30 DAYS'
84+ AND is_delete = false
7985 AND is_private = false
8086 )
8187
@@ -97,6 +103,7 @@ func (app *ApiServer) v1UsersFeed(c *fiber.Ctx) error {
97103 // "limit": c.Query("limit", "50"),
98104 "limit" : 40 ,
99105 "offset" : c .Query ("offset" , "0" ),
106+ "filter" : c .Query ("filter" , "all" ), // original, repost
100107 })
101108 if err != nil {
102109 return err
0 commit comments