♻️ Upgrade to new feed reader
This commit is contained in:
@@ -34,8 +34,7 @@ func GetFeed(c *fiber.Ctx, limit int, user *uint, cursor *time.Time) ([]FeedEntr
|
||||
// Planing the feed
|
||||
limitF := float64(limit)
|
||||
interCount := int(math.Ceil(limitF * 0.5))
|
||||
fediCount := int(math.Ceil(limitF * 0.25))
|
||||
newsCount := int(math.Ceil(limitF * 0.25))
|
||||
readerCount := int(math.Ceil(limitF * 0.5))
|
||||
|
||||
// Internal posts
|
||||
interTx, err := services.UniversalPostFilter(c, database.C)
|
||||
@@ -45,32 +44,21 @@ func GetFeed(c *fiber.Ctx, limit int, user *uint, cursor *time.Time) ([]FeedEntr
|
||||
if cursor != nil {
|
||||
interTx = interTx.Where("published_at < ?", *cursor)
|
||||
}
|
||||
interPosts, err := ListPostForFeed(interTx, interCount, user, c.Get("X-API-Version", "1"))
|
||||
posts, err := ListPostForFeed(interTx, interCount, user, c.Get("X-API-Version", "1"))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load interactive posts: %v", err)
|
||||
}
|
||||
feed = append(feed, interPosts...)
|
||||
|
||||
// Fediverse posts
|
||||
fediTx := database.C
|
||||
if cursor != nil {
|
||||
fediTx = fediTx.Where("created_at < ?", *cursor)
|
||||
}
|
||||
fediPosts, err := ListFediversePostForFeed(fediTx, fediCount)
|
||||
if err != nil {
|
||||
return feed, fmt.Errorf("failed to load fediverse posts: %v", err)
|
||||
}
|
||||
feed = append(feed, fediPosts...)
|
||||
feed = append(feed, posts...)
|
||||
|
||||
sort.Slice(feed, func(i, j int) bool {
|
||||
return feed[i].CreatedAt.After(feed[j].CreatedAt)
|
||||
})
|
||||
|
||||
// News today - from Reader
|
||||
if news, err := ListNewsForFeed(newsCount, cursor); err != nil {
|
||||
if news, err := ListNewsForFeed(readerCount, cursor); err != nil {
|
||||
log.Error().Err(err).Msg("Failed to load news in getting feed...")
|
||||
} else {
|
||||
feed = append(feed, news)
|
||||
feed = append(feed, news...)
|
||||
}
|
||||
|
||||
return feed, nil
|
||||
@@ -100,27 +88,10 @@ func ListPostForFeed(tx *gorm.DB, limit int, user *uint, api string) ([]FeedEntr
|
||||
return entries, nil
|
||||
}
|
||||
|
||||
func ListFediversePostForFeed(tx *gorm.DB, limit int) ([]FeedEntry, error) {
|
||||
var posts []models.FediversePost
|
||||
if err := tx.
|
||||
Preload("User").Limit(limit).
|
||||
Find(&posts).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
entries := lo.Map(posts, func(post models.FediversePost, _ int) FeedEntry {
|
||||
return FeedEntry{
|
||||
Type: "fediverse.post",
|
||||
Data: post,
|
||||
CreatedAt: post.CreatedAt,
|
||||
}
|
||||
})
|
||||
return entries, nil
|
||||
}
|
||||
|
||||
func ListNewsForFeed(limit int, cursor *time.Time) (FeedEntry, error) {
|
||||
func ListNewsForFeed(limit int, cursor *time.Time) ([]FeedEntry, error) {
|
||||
conn, err := gap.Nx.GetClientGrpcConn("re")
|
||||
if err != nil {
|
||||
return FeedEntry{}, fmt.Errorf("failed to get grpc connection with reader: %v", err)
|
||||
return nil, fmt.Errorf("failed to get grpc connection with reader: %v", err)
|
||||
}
|
||||
client := proto.NewFeedServiceClient(conn)
|
||||
request := &proto.GetFeedRequest{
|
||||
@@ -131,16 +102,16 @@ func ListNewsForFeed(limit int, cursor *time.Time) (FeedEntry, error) {
|
||||
}
|
||||
resp, err := client.GetFeed(context.Background(), request)
|
||||
if err != nil {
|
||||
return FeedEntry{}, fmt.Errorf("failed to get feed from reader: %v", err)
|
||||
return nil, fmt.Errorf("failed to get feed from reader: %v", err)
|
||||
}
|
||||
var createdAt time.Time
|
||||
return FeedEntry{
|
||||
Type: "reader.news",
|
||||
CreatedAt: createdAt,
|
||||
Data: lo.Map(resp.Items, func(item *proto.FeedItem, _ int) map[string]any {
|
||||
cta := time.UnixMilli(int64(item.CreatedAt))
|
||||
createdAt = lo.Ternary(createdAt.Before(cta), cta, createdAt)
|
||||
return nex.DecodeMap(item.Content)
|
||||
}),
|
||||
}, nil
|
||||
return lo.Map(resp.Items, func(item *proto.FeedItem, _ int) FeedEntry {
|
||||
cta := time.UnixMilli(int64(item.CreatedAt))
|
||||
createdAt = lo.Ternary(createdAt.Before(cta), cta, createdAt)
|
||||
return FeedEntry{
|
||||
Type: item.Type,
|
||||
Data: nex.DecodeMap(item.Content),
|
||||
CreatedAt: cta,
|
||||
}
|
||||
}), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user