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
|
||
}
|