getfollowslogic.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package logic
  2. import (
  3. "context"
  4. "slowwild/internal/svc"
  5. "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver"
  6. "slowwild/internal/errorx"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type GetFollowsLogic struct {
  10. ctx context.Context
  11. svcCtx *svc.ServiceContext
  12. logx.Logger
  13. }
  14. func NewGetFollowsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFollowsLogic {
  15. return &GetFollowsLogic{
  16. ctx: ctx,
  17. svcCtx: svcCtx,
  18. Logger: logx.WithContext(ctx),
  19. }
  20. }
  21. // 查询我的关注
  22. func (l *GetFollowsLogic) GetFollows(in *slowwildserver.GetFollowingReq) (*slowwildserver.GetFollowingRes, error) {
  23. if in.UserId <= 0 || in.Page <= 0 || in.PageSize <= 0 {
  24. return nil, errorx.ErrInvalidParam
  25. }
  26. // 获取关注记录
  27. follows, err := l.svcCtx.UserFollowModel.GetFollowsList(l.ctx, in.QueryUserId, int(in.Page), int(in.PageSize))
  28. if err != nil {
  29. return nil, errorx.ErrUserQueryFailed
  30. }
  31. // 获取所有关注的用户ID
  32. userIds := make([]int64, 0, len(follows))
  33. for _, follow := range follows {
  34. userIds = append(userIds, follow.ToUserId) // 注意这里使用 ToUserId
  35. }
  36. // 查询关注的用户信息
  37. users, err := l.svcCtx.UserModel.FindByIds(l.ctx, userIds)
  38. if err != nil {
  39. return nil, errorx.ErrUserQueryFailed
  40. }
  41. // 查询这些用户是否也关注了当前用户(互关检查)
  42. mutualFollows, err := l.svcCtx.UserFollowModel.CheckMutualFollows(l.ctx, in.UserId, userIds)
  43. if err != nil {
  44. return nil, errorx.ErrUserQueryFailed
  45. }
  46. // 构建响应
  47. resp := &slowwildserver.GetFollowingRes{
  48. List: make([]*slowwildserver.FollowUserInfo, 0, len(users)),
  49. }
  50. for _, user := range users {
  51. resp.List = append(resp.List, &slowwildserver.FollowUserInfo{
  52. User: &slowwildserver.UserInfo{
  53. Id: user.ID,
  54. Nickname: user.Nickname,
  55. Avatar: user.Avatar,
  56. Sex: int32(user.Sex),
  57. },
  58. IsMutualFollow: mutualFollows[user.ID], // 设置是否互关
  59. })
  60. }
  61. return resp, nil
  62. }