@@ -126,7 +126,9 @@ func (s *server) GetMessages(ctx context.Context, req *chatpb.GetMessagesRequest
126126 switch err {
127127 case nil :
128128 case chat .ErrChatNotFound :
129- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
129+ return & chatpb.GetMessagesResponse {
130+ Result : chatpb .GetMessagesResponse_MESSAGE_NOT_FOUND ,
131+ }, nil
130132 default :
131133 log .WithError (err ).Warn ("failure getting chat record" )
132134 return nil , status .Error (codes .Internal , "" )
@@ -137,7 +139,9 @@ func (s *server) GetMessages(ctx context.Context, req *chatpb.GetMessagesRequest
137139 log .WithError (err ).Warn ("failure determing chat member ownership" )
138140 return nil , status .Error (codes .Internal , "" )
139141 } else if ! ownsChatMember {
140- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
142+ return & chatpb.GetMessagesResponse {
143+ Result : chatpb .GetMessagesResponse_DENIED ,
144+ }, nil
141145 }
142146
143147 var limit uint64
@@ -175,6 +179,11 @@ func (s *server) GetMessages(ctx context.Context, req *chatpb.GetMessagesRequest
175179 return nil , status .Error (codes .Internal , "" )
176180 }
177181
182+ if len (protoChatMessages ) == 0 {
183+ return & chatpb.GetMessagesResponse {
184+ Result : chatpb .GetMessagesResponse_MESSAGE_NOT_FOUND ,
185+ }, nil
186+ }
178187 return & chatpb.GetMessagesResponse {
179188 Result : chatpb .GetMessagesResponse_OK ,
180189 Messages : protoChatMessages ,
@@ -227,7 +236,11 @@ func (s *server) StreamChatEvents(streamer chatpb.Chat_StreamChatEventsServer) e
227236 switch err {
228237 case nil :
229238 case chat .ErrChatNotFound :
230- return status .Error (codes .Unimplemented , "todo: missing result code" )
239+ return streamer .Send (& chatpb.StreamChatEventsResponse {
240+ Type : & chatpb.StreamChatEventsResponse_Error {
241+ Error : & chatpb.ChatStreamEventError {Code : chatpb .ChatStreamEventError_CHAT_NOT_FOUND },
242+ },
243+ })
231244 default :
232245 log .WithError (err ).Warn ("failure getting chat record" )
233246 return status .Error (codes .Internal , "" )
@@ -238,7 +251,11 @@ func (s *server) StreamChatEvents(streamer chatpb.Chat_StreamChatEventsServer) e
238251 log .WithError (err ).Warn ("failure determing chat member ownership" )
239252 return status .Error (codes .Internal , "" )
240253 } else if ! ownsChatMember {
241- return status .Error (codes .Unimplemented , "todo: missing result code" )
254+ return streamer .Send (& chatpb.StreamChatEventsResponse {
255+ Type : & chatpb.StreamChatEventsResponse_Error {
256+ Error : & chatpb.ChatStreamEventError {Code : chatpb .ChatStreamEventError_DENIED },
257+ },
258+ })
242259 }
243260
244261 streamKey := fmt .Sprintf ("%s:%s" , chatId .String (), memberId .String ())
@@ -282,7 +299,8 @@ func (s *server) StreamChatEvents(streamer chatpb.Chat_StreamChatEventsServer) e
282299 sendPingCh := time .After (0 )
283300 streamHealthCh := monitorChatEventStreamHealth (ctx , log , streamRef , streamer )
284301
285- go s .flush (ctx , chatId , owner , stream )
302+ // todo: We should also "flush" pointers for each chat member
303+ go s .flushMessages (ctx , chatId , owner , stream )
286304
287305 for {
288306 select {
@@ -330,9 +348,9 @@ func (s *server) StreamChatEvents(streamer chatpb.Chat_StreamChatEventsServer) e
330348 }
331349}
332350
333- func (s * server ) flush (ctx context.Context , chatId chat.ChatId , owner * common.Account , stream * chatEventStream ) {
351+ func (s * server ) flushMessages (ctx context.Context , chatId chat.ChatId , owner * common.Account , stream * chatEventStream ) {
334352 log := s .log .WithFields (logrus.Fields {
335- "method" : "flush " ,
353+ "method" : "flushMessages " ,
336354 "chat_id" : chatId .String (),
337355 "owner_account" : owner .PublicKey ().ToBase58 (),
338356 })
@@ -347,7 +365,9 @@ func (s *server) flush(ctx context.Context, chatId chat.ChatId, owner *common.Ac
347365 query .WithDirection (query .Descending ),
348366 query .WithLimit (flushMessageCount ),
349367 )
350- if err != nil {
368+ if err == chat .ErrMessageNotFound {
369+ return
370+ } else if err != nil {
351371 log .WithError (err ).Warn ("failure getting chat messages" )
352372 return
353373 }
@@ -429,7 +449,9 @@ func (s *server) SendMessage(ctx context.Context, req *chatpb.SendMessageRequest
429449 log .WithError (err ).Warn ("failure determing chat member ownership" )
430450 return nil , status .Error (codes .Internal , "" )
431451 } else if ! ownsChatMember {
432- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
452+ return & chatpb.SendMessageResponse {
453+ Result : chatpb .SendMessageResponse_DENIED ,
454+ }, nil
433455 }
434456
435457 chatLock := s .chatLocks .Get (chatId [:])
@@ -551,7 +573,9 @@ func (s *server) AdvancePointer(ctx context.Context, req *chatpb.AdvancePointerR
551573 switch pointerType {
552574 case chat .PointerTypeDelivered , chat .PointerTypeRead :
553575 default :
554- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
576+ return & chatpb.AdvancePointerResponse {
577+ Result : chatpb .AdvancePointerResponse_INVALID_POINTER_TYPE ,
578+ }, nil
555579 }
556580
557581 pointerValue , err := chat .GetMessageIdFromProto (req .Pointer .Value )
@@ -584,7 +608,9 @@ func (s *server) AdvancePointer(ctx context.Context, req *chatpb.AdvancePointerR
584608 log .WithError (err ).Warn ("failure determing chat member ownership" )
585609 return nil , status .Error (codes .Internal , "" )
586610 } else if ! ownsChatMember {
587- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
611+ return & chatpb.AdvancePointerResponse {
612+ Result : chatpb .AdvancePointerResponse_DENIED ,
613+ }, nil
588614 }
589615
590616 _ , err = s .data .GetChatMessageByIdV2 (ctx , chatId , pointerValue )
@@ -669,7 +695,9 @@ func (s *server) SetMuteState(ctx context.Context, req *chatpb.SetMuteStateReque
669695 log .WithError (err ).Warn ("failure determing chat member ownership" )
670696 return nil , status .Error (codes .Internal , "" )
671697 } else if ! isChatMember {
672- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
698+ return & chatpb.SetMuteStateResponse {
699+ Result : chatpb .SetMuteStateResponse_DENIED ,
700+ }, nil
673701 }
674702
675703 err = s .data .SetChatMuteStateV2 (ctx , chatId , memberId , req .IsMuted )
@@ -732,7 +760,9 @@ func (s *server) SetSubscriptionState(ctx context.Context, req *chatpb.SetSubscr
732760 log .WithError (err ).Warn ("failure determing chat member ownership" )
733761 return nil , status .Error (codes .Internal , "" )
734762 } else if ! ownsChatMember {
735- return nil , status .Error (codes .Unimplemented , "todo: missing result code" )
763+ return & chatpb.SetSubscriptionStateResponse {
764+ Result : chatpb .SetSubscriptionStateResponse_DENIED ,
765+ }, nil
736766 }
737767
738768 err = s .data .SetChatSubscriptionStateV2 (ctx , chatId , memberId , req .IsSubscribed )
0 commit comments