58 lines
2.0 KiB
Go
58 lines
2.0 KiB
Go
|
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
|
|||
|
}
|