this repo has no description

feat: don't convert cursor in feedweb and simplify getPosts in mostliked

+26 -24
+1 -5
cmd/feedweb/main.go
··· 43 43 limit = l 44 44 } 45 45 } 46 - var cursor string = "0" 47 - if req.Cursor != "" { 48 - cursor = req.Cursor 49 - } 50 46 51 47 params := feeds.FeedgenParams{ 52 48 Feed: req.Feed, 53 49 Limit: limit, 54 - Cursor: cursor, 50 + Cursor: req.Cursor, 55 51 Langs: parseLangs(c.Request().Header.Get("Accept-Language")), 56 52 } 57 53
+25 -19
pkg/mostliked/generator.go
··· 18 18 Likes int 19 19 } 20 20 21 - func getPosts(ctx context.Context, dbCnx *sql.DB, params feeds.FeedgenParams) ([]PostRow, error) { 21 + func getPosts(ctx context.Context, dbCnx *sql.DB, langs []string, limit, offset int) ([]PostRow, error) { 22 22 var queryParams []any 23 23 var query strings.Builder 24 24 fmt.Fprint(&query, "SELECT posts.uri, likes FROM posts LEFT JOIN langs ON posts.uri = langs.uri") 25 - fmt.Fprint(&query, " WHERE 1=1 ") 26 - if len(params.Langs) > 0 { 27 - fmt.Fprint(&query, " AND ( ") 28 - for idx, lang := range params.Langs { 25 + if len(langs) > 0 { 26 + fmt.Fprint(&query, " WHERE lang IN (") 27 + for idx, lang := range langs { 29 28 if idx > 0 { 30 - fmt.Fprint(&query, " OR ") 29 + fmt.Fprint(&query, ",") 31 30 } 32 - fmt.Fprint(&query, " lang = ? ") 33 - queryParams = append(queryParams, lang.String()) 31 + fmt.Fprint(&query, "?") 32 + queryParams = append(queryParams, lang) 34 33 } 35 - fmt.Fprint(&query, " ) ") 34 + fmt.Fprint(&query, ")") 36 35 } 37 - fmt.Fprint(&query, "ORDER BY likes DESC, create_ts DESC ") 38 - fmt.Fprint(&query, "LIMIT ? OFFSET ?") 39 - queryParams = append(queryParams, params.Limit, params.Cursor) 40 - fmt.Println(query.String(), queryParams) 36 + fmt.Fprint(&query, " ORDER BY likes DESC, create_ts DESC LIMIT ? OFFSET ?") 37 + queryParams = append(queryParams, limit, offset) 38 + 39 + fmt.Printf("query: %v %+v\n", query.String(), queryParams) 41 40 42 41 rows, err := dbCnx.QueryContext(ctx, query.String(), queryParams...) 43 42 if err != nil { ··· 65 64 } 66 65 defer dbCnx.Close() 67 66 68 - rows, err := getPosts(ctx, dbCnx, params) 67 + var langs []string 68 + for _, lang := range params.Langs { 69 + langs = append(langs, lang.String()) 70 + } 71 + 72 + offset := 0 73 + if parsed, err := strconv.Atoi(params.Cursor); err == nil { 74 + offset = parsed 75 + } else { 76 + log.Println("error converting cursor") 77 + } 78 + 79 + rows, err := getPosts(ctx, dbCnx, langs, params.Limit, offset) 69 80 if err != nil { 70 81 log.Println("error fetching rows:", err) 71 82 } ··· 81 92 Feed: posts, 82 93 } 83 94 84 - var offset int = 0 85 - offset, err = strconv.Atoi(params.Cursor) 86 - if err != nil { 87 - log.Println("error converting cursor") 88 - } 89 95 offset += len(posts) 90 96 cursor = strconv.Itoa(offset) 91 97