ReadConversation returns events after since_seq (hydration / resume).
(ctx context.Context, req *pb.ReadConversationRequest)
| 135 | |
| 136 | // ReadConversation returns events after since_seq (hydration / resume). |
| 137 | func (h *Handler) ReadConversation(ctx context.Context, req *pb.ReadConversationRequest) (*pb.ReadConversationResponse, error) { |
| 138 | if err := h.hubReady(); err != nil { |
| 139 | return nil, err |
| 140 | } |
| 141 | principal, err := h.hubPrincipal(ctx, "") |
| 142 | if err != nil { |
| 143 | return nil, err |
| 144 | } |
| 145 | if err := h.authorizeConv(ctx, req.GetConvId(), principal); err != nil { |
| 146 | return nil, err |
| 147 | } |
| 148 | events, err := h.hub.Read(ctx, req.GetConvId(), req.GetSinceSeq(), int(req.GetLimit())) |
| 149 | if err != nil { |
| 150 | h.logger.Error("hub read failed", zap.String("conv_id", req.GetConvId()), zap.Error(err)) |
| 151 | return nil, status.Errorf(codes.Internal, "%s", i18n.T("server.hub.read_error", err)) |
| 152 | } |
| 153 | out := make([]*pb.ConversationEvent, 0, len(events)) |
| 154 | for _, ev := range events { |
| 155 | out = append(out, eventToProto(ev)) |
| 156 | } |
| 157 | return &pb.ReadConversationResponse{Events: out}, nil |
| 158 | } |
| 159 | |
| 160 | // SubscribeConversation live-tails a conversation. It streams the backlog after |
| 161 | // since_seq, then live events. On consumer overflow the stream ends with |
nothing calls this directly
no test coverage detected