package logic import ( "context" "juwan-backend/app/community/rpc/internal/svc" "juwan-backend/app/community/rpc/pb" "github.com/zeromicro/go-zero/core/logx" ) type SearchPostLikesLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewSearchPostLikesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SearchPostLikesLogic { return &SearchPostLikesLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *SearchPostLikesLogic) SearchPostLikes(in *pb.SearchPostLikesReq) (*pb.SearchPostLikesResp, error) { limit := in.GetLimit() if limit <= 0 { limit = 20 } offset := in.GetOffset() if offset < 0 { offset = 0 } store := l.svcCtx.Store store.Mu.RLock() defer store.Mu.RUnlock() filtered := make([]*pb.PostLikes, 0, len(store.PostLikes)) for _, like := range store.PostLikes { if in.PostId != nil && like.GetPostId() != in.GetPostId() { continue } if in.UserId != nil && like.GetUserId() != in.GetUserId() { continue } cp := *like filtered = append(filtered, &cp) } if offset >= int64(len(filtered)) { return &pb.SearchPostLikesResp{PostLikes: []*pb.PostLikes{}}, nil } end := offset + limit if end > int64(len(filtered)) { end = int64(len(filtered)) } return &pb.SearchPostLikesResp{PostLikes: filtered[offset:end]}, nil }