this repo has no description
1package main
2
3import (
4 "net/http"
5
6 "github.com/labstack/echo/v4"
7 "github.com/labstack/echo/v4/middleware"
8 "github.com/edavis/bsky-feeds/mostliked"
9)
10
11type SkeletonRequest struct {
12 Feed string `query:"feed"`
13 Limit int64 `query:"limit"`
14 Offset string `query:"offset"`
15}
16
17type SkeletonResponse struct {
18 Cursor string `json:"cursor,omitempty"`
19 Feed []Post `json:"feed"`
20}
21
22type Post struct {
23 Uri string `json:"post"`
24}
25
26type SkeletonHeader struct {
27 Langs []string `header:"Accept-Language"`
28}
29
30func getFeedSkeleton(c echo.Context) error {
31 var req SkeletonRequest
32 if err := c.Bind(&req); err != nil {
33 return c.String(http.StatusBadRequest, "bad request")
34 }
35 var hdr SkeletonHeader
36 if err := (&echo.DefaultBinder{}).BindHeaders(c, &hdr); err != nil {
37 return c.String(http.StatusBadRequest, "bad request")
38 }
39
40 var posts []Post
41 uris := mostliked.Feed(mostliked.FeedViewParams{
42 Limit: req.Limit,
43 Offset: req.Offset,
44 Langs: hdr.Langs,
45 })
46 for _, uri := range uris {
47 posts = append(posts, Post{uri})
48 }
49 response := SkeletonResponse{
50 Feed: posts,
51 }
52 return c.JSON(http.StatusOK, response)
53}
54
55func main() {
56 e := echo.New()
57 e.Use(middleware.Logger())
58 e.Use(middleware.Recover())
59 e.GET("/xrpc/app.bsky.feed.getFeedSkeleton", getFeedSkeleton)
60 e.Logger.Fatal(e.Start(":5000"))
61}