- commit
- a34af95
- parent
- eea5880
- author
- Eric Bower
- date
- 2025-08-02 13:20:11 -0400 EDT
refactor(prose): only display 1 post per user in feed
4 files changed,
+27,
-24
+2,
-2
1@@ -548,7 +548,7 @@ func readHandler(w http.ResponseWriter, r *http.Request) {
2 var pager *db.Paginate[*db.Post]
3 var err error
4 if tag == "" {
5- pager, err = dbpool.FindAllPosts(&db.Pager{Num: 30, Page: page}, cfg.Space)
6+ pager, err = dbpool.FindPostsForFeed(&db.Pager{Num: 30, Page: page}, cfg.Space)
7 } else {
8 pager, err = dbpool.FindPostsByTag(&db.Pager{Num: 30, Page: page}, tag, cfg.Space)
9 }
10@@ -762,7 +762,7 @@ func rssHandler(w http.ResponseWriter, r *http.Request) {
11 logger := shared.GetLogger(r)
12 cfg := shared.GetCfg(r)
13
14- pager, err := dbpool.FindAllPosts(&db.Pager{Num: 25, Page: 0}, cfg.Space)
15+ pager, err := dbpool.FindPostsForFeed(&db.Pager{Num: 25, Page: 0}, cfg.Space)
16 if err != nil {
17 logger.Error("find all posts", "err", err.Error())
18 http.Error(w, err.Error(), http.StatusInternalServerError)
+1,
-1
1@@ -413,7 +413,7 @@ type DB interface {
2 FindUpdatedPostsForUser(userID string, space string) ([]*Post, error)
3 FindPostWithFilename(filename string, userID string, space string) (*Post, error)
4 FindPostWithSlug(slug string, userID string, space string) (*Post, error)
5- FindAllPosts(pager *Pager, space string) (*Paginate[*Post], error)
6+ FindPostsForFeed(pager *Pager, space string) (*Paginate[*Post], error)
7 FindAllUpdatedPosts(pager *Pager, space string) (*Paginate[*Post], error)
8 InsertPost(post *Post) (*Post, error)
9 UpdatePost(post *Post) (*Post, error)
+23,
-20
1@@ -183,25 +183,28 @@ const (
2 // add some users to deny list since they are robogenerating a bunch of posts
3 // per day and are creating a lot of noise.
4 sqlSelectPostsByRank = `
5- SELECT
6- posts.id,
7- user_id,
8- filename,
9- slug,
10- title,
11- text,
12- description,
13- publish_at,
14- app_users.name as username,
15- posts.updated_at,
16- posts.mime_type
17- FROM posts
18- LEFT JOIN app_users ON app_users.id = posts.user_id
19- WHERE
20- hidden = FALSE AND
21- publish_at::date <= CURRENT_DATE AND
22- cur_space = $3 AND
23- app_users.name NOT IN ('algiegray', 'mrrccc')
24+ SELECT *
25+ FROM (
26+ SELECT DISTINCT ON (posts.user_id)
27+ posts.id,
28+ posts.user_id,
29+ posts.filename,
30+ posts.slug,
31+ posts.title,
32+ posts.text,
33+ posts.description,
34+ posts.publish_at,
35+ app_users.name AS username,
36+ posts.updated_at,
37+ posts.mime_type
38+ FROM posts
39+ LEFT JOIN app_users ON app_users.id = posts.user_id
40+ WHERE
41+ hidden = FALSE
42+ AND publish_at::date <= CURRENT_DATE
43+ AND cur_space = $3
44+ ORDER BY posts.user_id, publish_at DESC
45+ ) AS latest_posts
46 ORDER BY publish_at DESC
47 LIMIT $1 OFFSET $2`
48
49@@ -757,7 +760,7 @@ func (me *PsqlDB) postPager(rs *sql.Rows, pageNum int, space string, tag string)
50 return pager, nil
51 }
52
53-func (me *PsqlDB) FindAllPosts(page *db.Pager, space string) (*db.Paginate[*db.Post], error) {
54+func (me *PsqlDB) FindPostsForFeed(page *db.Pager, space string) (*db.Paginate[*db.Post], error) {
55 rs, err := me.Db.Query(sqlSelectPostsByRank, page.Num, page.Num*page.Page, space)
56 if err != nil {
57 return nil, err
+1,
-1
1@@ -105,7 +105,7 @@ func (me *StubDB) FindPost(postID string) (*db.Post, error) {
2 return nil, errNotImpl
3 }
4
5-func (me *StubDB) FindAllPosts(page *db.Pager, space string) (*db.Paginate[*db.Post], error) {
6+func (me *StubDB) FindPostsForFeed(page *db.Pager, space string) (*db.Paginate[*db.Post], error) {
7 return &db.Paginate[*db.Post]{}, errNotImpl
8 }
9