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 GetFollowsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewGetFollowsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFollowsLogic { return &GetFollowsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 查询我的关注 func (l *GetFollowsLogic) GetFollows(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.GetFollowsList(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.ToUserId) // 注意这里使用 ToUserId } // 查询关注的用户信息 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 }