package logic import ( "context" "slowwild/internal/errorx" "slowwild/internal/svc" "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver" "github.com/zeromicro/go-zero/core/logx" ) type SearchUsernameLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewSearchUsernameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SearchUsernameLogic { return &SearchUsernameLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 搜索用户名称 func (l *SearchUsernameLogic) SearchUsername(in *slowwildserver.SearchUsernameReq) (*slowwildserver.SearchUsernameRes, error) { if in.Keyword == "" || in.Page <= 0 || in.PageSize <= 0 || in.UserId <= 0 { return nil, errorx.ErrInvalidParam } // 搜索用户 users, err := l.svcCtx.UserModel.SearchByNickname(l.ctx, in.Keyword, int(in.Page), int(in.PageSize)) if err != nil { return nil, errorx.ErrUserQueryFailed } // 获取所有搜索结果的用户ID userIds := make([]int64, 0, len(users)) for _, user := range users { userIds = append(userIds, user.ID) } // 查询当前用户是否关注了这些用户 followMap, err := l.svcCtx.UserFollowModel.CheckMutualFollows(l.ctx, in.UserId, userIds) if err != nil { return nil, errorx.ErrUserQueryFailed } // 构建响应 resp := &slowwildserver.SearchUsernameRes{ List: make([]*slowwildserver.SearchUsernameItem, 0, len(users)), } for _, user := range users { resp.List = append(resp.List, &slowwildserver.SearchUsernameItem{ Id: user.ID, Nickname: user.Nickname, Avatar: user.Avatar, Sex: int32(user.Sex), IsFollow: followMap[user.ID], // 添加关注状态 }) } return resp, nil }