From 6cfa6e8285b40aa12c4e6ce296853641398afbf8 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 6 Apr 2025 14:15:54 +0800 Subject: [PATCH] :lipstick: Optimized the feed --- pkg/internal/grpc/feed.go | 7 ++++++- pkg/internal/services/feed.go | 13 +++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/internal/grpc/feed.go b/pkg/internal/grpc/feed.go index 0a7431b..711bdbe 100644 --- a/pkg/internal/grpc/feed.go +++ b/pkg/internal/grpc/feed.go @@ -2,6 +2,7 @@ package grpc import ( "context" + "time" iproto "git.solsynth.dev/hypernet/interactive/pkg/proto" "git.solsynth.dev/hypernet/nexus/pkg/nex" @@ -14,7 +15,11 @@ import ( func (v *Server) GetFeed(_ context.Context, in *iproto.GetFeedRequest) (*iproto.GetFeedResponse, error) { limit := int(in.GetLimit()) - articles, err := services.GetTodayFeedRandomly(limit) + var cursor *time.Time + if in.Cursor != nil { + cursor = lo.ToPtr(time.UnixMilli(int64(in.GetCursor()))) + } + articles, err := services.GetTodayFeedRandomly(limit, cursor) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } diff --git a/pkg/internal/services/feed.go b/pkg/internal/services/feed.go index 4e5e271..774fa3b 100644 --- a/pkg/internal/services/feed.go +++ b/pkg/internal/services/feed.go @@ -3,13 +3,18 @@ package services import ( "git.solsynth.dev/hypernet/reader/pkg/internal/database" "git.solsynth.dev/hypernet/reader/pkg/internal/models" + "time" ) -func GetTodayFeedRandomly(limit int) ([]models.SubscriptionItem, error) { +func GetTodayFeedRandomly(limit int, cursor *time.Time) ([]models.SubscriptionItem, error) { + tx := database.C + if cursor != nil { + tx = tx.Where("published_at < ?", *cursor) + } + var articles []models.SubscriptionItem - if err := database.C.Limit(limit). - Where("DATE(created_at) = CURRENT_DATE"). // Created in today - Order("RANDOM()"). + if err := tx.Limit(limit). + Order("published_at DESC"). Omit("Content"). Preload("Feed"). Find(&articles).Error; err != nil {