package timelineservicelogic import ( "app-cloudep-tweeting-service/internal/domain" "app-cloudep-tweeting-service/internal/domain/repository" "context" ers "code.30cm.net/digimon/library-go/errs" "app-cloudep-tweeting-service/gen_result/pb/tweeting" "app-cloudep-tweeting-service/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type FetchTimelineLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewFetchTimelineLogic(ctx context.Context, svcCtx *svc.ServiceContext) *FetchTimelineLogic { return &FetchTimelineLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type fetchTimelineReq struct { UID string `json:"uid" validate:"required"` PageSize int64 `json:"page_size" validate:"required"` PageIndex int64 `json:"page_index" validate:"required"` } // FetchTimeline 取得這個人的動態時報 func (l *FetchTimelineLogic) FetchTimeline(in *tweeting.GetTimelineReq) (*tweeting.FetchTimelineResponse, error) { // 驗證資料 if err := l.svcCtx.Validate.ValidateAll(&fetchTimelineReq{ UID: in.GetUid(), PageSize: in.PageSize, PageIndex: in.PageIndex, }); err != nil { // 錯誤代碼 05-011-00 return nil, ers.InvalidFormat(err.Error()) } resp, err := l.svcCtx.TimelineRepo.FetchTimeline(l.ctx, repository.FetchTimelineRequest{ UID: in.GetUid(), PageIndex: in.GetPageIndex(), PageSize: in.GetPageSize(), }) if err != nil { // 錯誤代碼 05-021-21 e := domain.CommentErrorL( domain.FetchTimeLineErrorCode, logx.WithContext(l.ctx), []logx.LogField{ {Key: "req", Value: in}, {Key: "func", Value: "TimelineRepo.FetchTimeline"}, {Key: "err", Value: err}, }, "failed to fetch timeline repo :", in.GetUid()).Wrap(err) return nil, e } result := make([]*tweeting.FetchTimelineItem, 0, resp.Page.Size) for _, item := range resp.Items { result = append(result, &tweeting.FetchTimelineItem{ PostId: item.PostID, Score: item.Score, }) } return &tweeting.FetchTimelineResponse{ Posts: result, Page: &tweeting.Pager{ Total: resp.Page.Total, Index: resp.Page.Index, Size: resp.Page.Size, }, }, nil }