package logic import ( "context" "errors" "juwan-backend/app/community/rpc/internal/svc" "juwan-backend/app/community/rpc/pb" "github.com/zeromicro/go-zero/core/logx" ) type SearchCommentLikesLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewSearchCommentLikesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SearchCommentLikesLogic { return &SearchCommentLikesLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *SearchCommentLikesLogic) SearchCommentLikes(in *pb.SearchCommentLikesReq) (*pb.SearchCommentLikesResp, error) { limit := in.GetLimit() if limit <= 0 { limit = 20 } if limit > 100 { return nil, errors.New("limit too large") } offset := in.GetOffset() if offset < 0 { offset = 0 } store := l.svcCtx.Store store.Mu.RLock() defer store.Mu.RUnlock() filtered := make([]*pb.CommentLikes, 0, len(store.CommentLikes)) for _, like := range store.CommentLikes { if in.GetCommentId() > 0 && like.GetCommentId() != in.GetCommentId() { continue } if in.GetUserId() > 0 && like.GetUserId() != in.GetUserId() { continue } cp := *like filtered = append(filtered, &cp) } if offset >= int64(len(filtered)) { return &pb.SearchCommentLikesResp{CommentLikes: []*pb.CommentLikes{}}, nil } end := offset + limit if end > int64(len(filtered)) { end = int64(len(filtered)) } return &pb.SearchCommentLikesResp{CommentLikes: filtered[offset:end]}, nil }