package logic import ( "context" "slowwild/internal/svc" "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver" "slowwild/internal/errorx" "github.com/zeromicro/go-zero/core/logx" ) type GetFansLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewGetFansLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFansLogic { return &GetFansLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 获取我的粉丝 func (l *GetFansLogic) GetFans(in *slowwildserver.GetFollowingReq) (*slowwildserver.GetFollowingRes, error) { if in.UserId <= 0 || in.Page <= 0 || in.PageSize <= 0 { return nil, errorx.ErrInvalidParam } // 获取粉丝关注记录 follows, err := l.svcCtx.UserFollowModel.GetFansList(l.ctx, in.QueryUserId, int(in.Page), int(in.PageSize)) if err != nil { return nil, errorx.ErrUserQueryFailed } // 获取所有粉丝的用户ID userIds := make([]int64, 0, len(follows)) for _, follow := range follows { userIds = append(userIds, follow.UserId) } // 查询粉丝用户信息 users, err := l.svcCtx.UserModel.FindByIds(l.ctx, userIds) if err != nil { return nil, errorx.ErrUserQueryFailed } // 查询当前用户是否关注了这些粉丝(互关检查) mutualFollows, err := l.svcCtx.UserFollowModel.CheckMutualFollows(l.ctx, in.UserId, userIds) if err != nil { return nil, errorx.ErrUserQueryFailed } // 构建响应 resp := &slowwildserver.GetFollowingRes{ List: make([]*slowwildserver.FollowUserInfo, 0, len(users)), } for _, user := range users { resp.List = append(resp.List, &slowwildserver.FollowUserInfo{ User: &slowwildserver.UserInfo{ Id: user.ID, Nickname: user.Nickname, Avatar: user.Avatar, Sex: int32(user.Sex), }, IsMutualFollow: mutualFollows[user.ID], // 设置是否互关 }) } return resp, nil }