+6
-1
cmd/feedweb/main.go
+6
-1
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
+
}
46
50
47
51
params := feeds.FeedgenParams{
48
52
Feed: req.Feed,
49
53
Limit: limit,
50
-
Cursor: req.Cursor,
54
+
Cursor: cursor,
51
55
Langs: parseLangs(c.Request().Header.Get("Accept-Language")),
52
56
}
57
+
53
58
feedFunc, ok := generators[req.Feed]
54
59
if !ok {
55
60
return c.String(http.StatusNotFound, "feed not found")
+14
-12
pkg/mostliked/generator.go
+14
-12
pkg/mostliked/generator.go
···
34
34
}
35
35
fmt.Fprint(&query, " ) ")
36
36
}
37
-
if params.Cursor != "" {
38
-
fmt.Fprint(&query, " AND likes <= ? ")
39
-
queryParams = append(queryParams, params.Cursor)
40
-
}
41
37
fmt.Fprint(&query, "ORDER BY likes DESC, create_ts DESC ")
42
-
fmt.Fprint(&query, "LIMIT ?")
43
-
queryParams = append(queryParams, params.Limit+1)
38
+
fmt.Fprint(&query, "LIMIT ? OFFSET ?")
39
+
queryParams = append(queryParams, params.Limit, params.Cursor)
40
+
fmt.Println(query.String(), queryParams)
44
41
45
42
rows, err := dbCnx.QueryContext(ctx, query.String(), queryParams...)
46
43
if err != nil {
···
76
73
var cursor string
77
74
posts := make([]*appbsky.FeedDefs_SkeletonFeedPost, 0, params.Limit)
78
75
79
-
for idx, row := range rows {
80
-
if idx+1 <= params.Limit {
81
-
posts = append(posts, &appbsky.FeedDefs_SkeletonFeedPost{Post: row.Uri})
82
-
}
83
-
cursor = strconv.Itoa(row.Likes)
76
+
for _, row := range rows {
77
+
posts = append(posts, &appbsky.FeedDefs_SkeletonFeedPost{Post: row.Uri})
84
78
}
85
79
86
80
skeleton := appbsky.FeedGetFeedSkeleton_Output{
87
81
Feed: posts,
88
82
}
89
83
90
-
if len(rows) == params.Limit {
84
+
var offset int = 0
85
+
offset, err = strconv.Atoi(params.Cursor)
86
+
if err != nil {
87
+
log.Println("error converting cursor")
88
+
}
89
+
offset += len(posts)
90
+
cursor = strconv.Itoa(offset)
91
+
92
+
if len(posts) == params.Limit {
91
93
skeleton.Cursor = &cursor
92
94
}
93
95