package repository import ( "app-cloudep-tweeting-service/gen_result/pb/tweeting" "context" ) /* ---------------------------------------- | | | | | | data A| data B |NO Data | .... | | | | | | ---------------------------------------- 動態時報在發現這個 Queue 有 No Data 的 Flag 時 就不再去 Query 資料庫,防止被狂刷。 只是要注意在業務上何時要 加入/刪除 這個 Flag */ // TimelineRepository 定義時間線的存儲接口,可以根據不同的排序策略實現。 type TimelineRepository interface { // AddPost 將貼文添加到動態時報,並根據排序策略進行排序。 AddPost(ctx context.Context, req AddPostRequest) error // FetchTimeline 獲取指定用戶的動態時報。 FetchTimeline(ctx context.Context, req FetchTimelineRequest) (FetchTimelineResponse, error) // SetNoMoreDataFlag 標記時間線已完整,避免繼續查詢資料庫。 SetNoMoreDataFlag(ctx context.Context, uid string) error // HasNoMoreData 檢查時間線是否已完整,決定是否需要查詢資料庫。 HasNoMoreData(ctx context.Context, uid string) (bool, error) // ClearNoMoreDataFlag 清除時間線的 "NoMoreData" 標誌。 ClearNoMoreDataFlag(ctx context.Context, uid string) error } // AddPostRequest 用於將貼文添加到時間線的請求結構體。 type AddPostRequest struct { UID string PostItems []TimelineItem } // TimelineItem 表示時間線中的一個元素,排序依據取決於 Score。 type TimelineItem struct { PostID string // 貼文ID Score int64 // 排序使用的分數,根據具體實現可能代表時間、優先級等 } // FetchTimelineRequest 用於獲取時間線的請求結構體。 type FetchTimelineRequest struct { UID string PageSize int64 PageIndex int64 } // FetchTimelineResponse 表示獲取時間線的回應結構體。 type FetchTimelineResponse struct { Items []TimelineItem Page tweeting.Pager }