package socialnetworkservicelogic import ( "app-cloudep-tweeting-service/internal/domain" "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 MarkFollowRelationLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewMarkFollowRelationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MarkFollowRelationLogic { return &MarkFollowRelationLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type doFollowReq struct { FollowerUID string `json:"follower_uid" validate:"required"` // 追隨者,跟隨你的人(別人關注你) FolloweeUID string `json:"followee_uid" validate:"required"` // 追蹤者,你跟隨的人(你關注別) } // MarkFollowRelation 關注 func (l *MarkFollowRelationLogic) MarkFollowRelation(in *tweeting.DoFollowerRelationReq) (*tweeting.OKResp, error) { // 驗證資料 if err := l.svcCtx.Validate.ValidateAll(&doFollowReq{ FollowerUID: in.GetFollowerUid(), FolloweeUID: in.GetFolloweeUid(), }); err != nil { // 錯誤代碼 05-011-00 return nil, ers.InvalidFormat(err.Error()) } // 這裡要幫建立關係, follower 追蹤 -> followee err := l.svcCtx.SocialNetworkRepository.MarkFollowerRelation(l.ctx, in.GetFollowerUid(), in.GetFolloweeUid()) if err != nil { // 錯誤代碼 05-021-30 e := domain.CommentErrorL( domain.MarkRelationErrorCode, logx.WithContext(l.ctx), []logx.LogField{ {Key: "req", Value: in}, {Key: "func", Value: "SocialNetworkRepository.MarkFollowerRelationBetweenUsers"}, {Key: "err", Value: err}, }, "failed to mark relation form -> to", in.GetFollowerUid(), in.GetFolloweeUid()).Wrap(err) return nil, e } return &tweeting.OKResp{}, nil }