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))); }
public Task <ResultMessages> GetConversationMessages(string conversationId, string startCt, string endCt, int limit = 50) { return(GetConversationMessagesMetric.TrackTime(() => store.GetConversationMessages(conversationId, startCt, endCt, limit))); }