public async Task <IActionResult> Get(string conversationId, string startCt, string endCt, int limit = 50)
        {
            using (logger.BeginScope("This log is for {conversationId}", conversationId))
            {
                var stopWatch = Stopwatch.StartNew();
                try
                {
                    var resultMessages = await store.GetConversationMessages(conversationId, startCt, endCt, limit);

                    var converter   = new Converter <Message, GetMessageDto>(message => new GetMessageDto(message));
                    var nextUri     = NextMessagesUri(conversationId, resultMessages.StartCt, limit);
                    var previousUri = PreviousMessagesUri(conversationId, resultMessages.EndCt, limit);

                    var messageDtos = new GetMessagesListDto(resultMessages.Messages.ConvertAll(converter), nextUri,
                                                             previousUri);
                    logger.LogInformation(Events.MessagesRequested,
                                          $"Conversation messages for {conversationId} has been requested!", DateTime.UtcNow);
                    return(Ok(messageDtos));
                }
                catch (StorageUnavailableException e)
                {
                    logger.LogError(Events.StorageError, e,
                                    $"Storage was not available to obtain list of conversation messages for {conversationId}",
                                    DateTime.UtcNow);
                    return(StatusCode(503, "Failed to reach Storage"));
                }
                catch (Exception e)
                {
                    logger.LogError(Events.InternalError, e,
                                    $"Failed to obtain list of conversation messages for {conversationId}", DateTime.UtcNow);
                    return(StatusCode(500, $"Failed to obtain list of conversation messages for {conversationId}"));
                }
                finally
                {
                    GetMessagesMetric.TrackValue(stopWatch.ElapsedMilliseconds);
                }
            }
        }
 public async Task <ResultMessages> GetConversationMessages(string conversationId, string startCt, string endCt, int limit = 50)
 {
     return(await resiliencyPolicy.ExecuteAsync(() => conversationStore.GetConversationMessages(conversationId, startCt, endCt, limit)));
 }
Пример #3
0
 public Task <ResultMessages> GetConversationMessages(string conversationId, string startCt, string endCt, int limit = 50)
 {
     return(GetConversationMessagesMetric.TrackTime(() =>
                                                    store.GetConversationMessages(conversationId, startCt, endCt, limit)));
 }