this repo has no description

feat: cleanup boundaries between feedweb and feedgens

Changed files
+37 -23
cmd
feedweb
pkg
feeds
mostliked
+2 -2
Makefile
···
all: bin/mostliked bin/feedweb
-
bin/mostliked: cmd/mostliked/main.go pkg/mostliked/handler.go db/mostliked/*.go
+
bin/mostliked: cmd/mostliked/main.go pkg/mostliked/*.go db/mostliked/*.go pkg/feeds/*.go
go build -o $@ ./cmd/mostliked
-
bin/feedweb: cmd/feedweb/main.go pkg/*/view.go db/*/*.go
+
bin/feedweb: cmd/feedweb/main.go pkg/*/*.go db/*/*.go pkg/feeds/*.go
go build -o $@ ./cmd/feedweb
.PHONY: clean
+14 -9
cmd/feedweb/main.go
···
"net/http"
appbsky "github.com/bluesky-social/indigo/api/bsky"
+
"github.com/edavis/bsky-feeds/pkg/feeds"
"github.com/edavis/bsky-feeds/pkg/mostliked"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
···
Langs []string `header:"Accept-Language"`
}
+
type FeedLookup map[string]func(feeds.FeedgenParams) appbsky.FeedGetFeedSkeleton_Output
+
func getFeedSkeleton(c echo.Context) error {
var req SkeletonRequest
if err := c.Bind(&req); err != nil {
···
return c.String(http.StatusBadRequest, "bad request")
}
-
var posts []*appbsky.FeedDefs_SkeletonFeedPost
-
uris := mostliked.Feed(mostliked.FeedViewParams{
+
generators := FeedLookup{
+
"at://did:plc:4nsduwlpivpuur4mqkbfvm6a/app.bsky.feed.generator/most-liked": mostliked.Feed,
+
}
+
params := feeds.FeedgenParams{
+
Feed: req.Feed,
Limit: req.Limit,
Offset: req.Offset,
Langs: hdr.Langs,
-
})
-
for _, uri := range uris {
-
posts = append(posts, &appbsky.FeedDefs_SkeletonFeedPost{Post: uri})
+
}
+
feedFunc, ok := generators[req.Feed]
+
if !ok {
+
return c.String(http.StatusNotFound, "feed not found")
}
-
-
return c.JSON(http.StatusOK, appbsky.FeedGetFeedSkeleton_Output{
-
Feed: posts,
-
})
+
feed := feedFunc(params)
+
return c.JSON(http.StatusOK, feed)
}
func main() {
+8
pkg/feeds/feeds.go
···
+
package feeds
+
+
type FeedgenParams struct {
+
Feed string
+
Limit int64
+
Offset string
+
Langs []string
+
}
+13 -12
pkg/mostliked/view.go
···
"log"
"strconv"
+
appbsky "github.com/bluesky-social/indigo/api/bsky"
db "github.com/edavis/bsky-feeds/db/mostliked"
+
"github.com/edavis/bsky-feeds/pkg/feeds"
_ "github.com/mattn/go-sqlite3"
)
-
type FeedViewParams struct {
-
Limit int64
-
Offset string
-
Langs []string
-
}
-
-
func Feed(args FeedViewParams) []string {
+
func Feed(params feeds.FeedgenParams) appbsky.FeedGetFeedSkeleton_Output {
ctx := context.Background()
dbCnx, err := sql.Open("sqlite3", "data/mostliked.db?_journal=WAL&_fk=on&mode=ro")
if err != nil {
···
}
defer dbCnx.Close()
-
offset, err := strconv.Atoi(args.Offset)
+
offset, err := strconv.Atoi(params.Offset)
if err != nil {
log.Println("error converting offset to integer")
}
queries := db.New(dbCnx)
rows, err := queries.ViewFeed(ctx, db.ViewFeedParams{
-
Limit: args.Limit,
+
Limit: params.Limit,
Offset: int64(offset),
})
if err != nil {
log.Println("error fetching rows")
}
-
var uris []string
+
var cursor string
+
var posts []*appbsky.FeedDefs_SkeletonFeedPost
for _, row := range rows {
-
uris = append(uris, row.Uri)
+
posts = append(posts, &appbsky.FeedDefs_SkeletonFeedPost{Post: row.Uri})
+
cursor = row.Uri
}
-
return uris
+
return appbsky.FeedGetFeedSkeleton_Output{
+
Cursor: &cursor,
+
Feed: posts,
+
}
}