From ce257f83b86256661bae78cbb0352713990bb43d Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 15 Mar 2025 14:24:06 +0800 Subject: [PATCH] :lipstick: News in a hortizontal scroll pack --- pkg/internal/services/feed.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/pkg/internal/services/feed.go b/pkg/internal/services/feed.go index b0c5916..48b8000 100644 --- a/pkg/internal/services/feed.go +++ b/pkg/internal/services/feed.go @@ -69,7 +69,7 @@ func GetFeed(c *fiber.Ctx, limit int, user *uint, cursor *time.Time) ([]FeedEntr if news, err := ListNewsForFeed(newsCount, 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 @@ -110,10 +110,10 @@ func ListFediversePostForFeed(tx *gorm.DB, limit int) ([]FeedEntry, error) { 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 nil, fmt.Errorf("failed to get grpc connection with reader: %v", err) + return FeedEntry{}, fmt.Errorf("failed to get grpc connection with reader: %v", err) } client := proto.NewFeedServiceClient(conn) request := &proto.GetFeedRequest{ @@ -124,13 +124,16 @@ func ListNewsForFeed(limit int, cursor *time.Time) ([]FeedEntry, error) { } resp, err := client.GetFeed(context.Background(), request) if err != nil { - return nil, fmt.Errorf("failed to get feed from reader: %v", err) + return FeedEntry{}, fmt.Errorf("failed to get feed from reader: %v", err) } - return lo.Map(resp.Items, func(item *proto.FeedItem, _ int) FeedEntry { - return FeedEntry{ - Type: item.Type, - Data: nex.DecodeMap(item.Content), - CreatedAt: time.UnixMilli(int64(item.CreatedAt)), - } - }), nil + 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 }