package logic import ( "context" "juwan-backend/app/chat/rpc/internal/svc" "juwan-backend/app/chat/rpc/pb" "github.com/zeromicro/go-zero/core/logx" ) type SearchChatSessionsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewSearchChatSessionsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SearchChatSessionsLogic { return &SearchChatSessionsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *SearchChatSessionsLogic) SearchChatSessions(in *pb.SearchChatSessionsReq) (*pb.SearchChatSessionsResp, error) { store := l.svcCtx.Store store.Mu.RLock() defer store.Mu.RUnlock() var results []*pb.ChatSessions for _, s := range store.Sessions { if in.Type != nil && s.Type != *in.Type { continue } if in.UserId != nil { found := false for _, p := range s.Participants { if p == *in.UserId { found = true break } } if !found { continue } } results = append(results, s) } limit := in.GetLimit() if limit <= 0 { limit = 20 } offset := in.GetPage() * limit if offset >= int64(len(results)) { return &pb.SearchChatSessionsResp{}, nil } end := offset + limit if end > int64(len(results)) { end = int64(len(results)) } return &pb.SearchChatSessionsResp{ChatSessions: results[offset:end]}, nil }