private SecurityListResponse BuildSecurityListResponse(ISession session, DateTime requestDate, string messageId) { IList <Entities.Security> securityList = securityService.GetSecurityListByRequestDate(session, requestDate); SecurityListResponse response = securityListResponseBuilder.BuildSecurityListResponse(securityList, requestDate); response.MessageId = messageId; return(response); }
public SecurityListResponse BuildSecurityListResponse(IList <Entities.Security> securityList, DateTime requestDate) { SecurityListResponse response = new SecurityListResponse(); response.RequestDate = requestDate; response.SecurityList = new List <Security>(); foreach (Entities.Security security in securityList) { Security securityRequest = new Security() { Symbol = security.Symbol, Name = security.Name, Currency = security.Currency }; response.SecurityList.Add(securityRequest); } return(response); }
private void ProcessResponse(IModel channel, BasicDeliverEventArgs e) { try { logger.Log(LogLevel.Info, $"Processing SecurityListRequest"); var requestFromQueue = e.GetMessage <SecurityListRequest>(); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]"); using (var session = dbSessionFactory.OpenSession()) { Request requestFromDb = requestService.GetOrCreateRequest(session, requestFromQueue, RequestType.SecurityListRequest, DateTime.Today); bool hasSameRequestDate = requestFromDb != null && requestFromDb.RequestDate == requestFromQueue.RequestDate.Date; bool isRequestStatusDone = requestFromDb != null && requestFromDb.RequestStatus == RequestStatus.Done; if (hasSameRequestDate && isRequestStatusDone) { logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: already processed with success, see Request {requestFromDb.RequestId}"); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: retrieving Securities from db"); SecurityListResponse securityListResponse = BuildSecurityListResponse(session, requestFromQueue.RequestDate, requestFromQueue.MessageId); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: {securityListResponse.SecurityList?.Count} Securities retrieved"); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: sending SecurityListResponse with {securityListResponse.SecurityList?.Count} Securities"); channel.PublishMessageOnQueue(securityListResponse, Queues.SecurityListResponseQueue); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: SecurityListResponse sent"); channel.SendAck(e.DeliveryTag); return; } if (!hasSameRequestDate) { logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: Request from db is related to {requestFromDb.RequestDate}, no Securities available for {requestFromQueue.RequestDate}"); SecurityListResponse securityListResponse = new SecurityListResponse() { ErrorMessage = $"Securities at {requestFromQueue.RequestDate} not available", MessageId = requestFromQueue.MessageId }; channel.PublishMessageOnQueue(securityListResponse, Queues.SecurityListResponseQueue); channel.SendAck(e.DeliveryTag); return; } logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: Retrieving Securities from IEXCloud"); IEnumerable <Symbol> symbolList = securityDataProviderRequestManager.GetSymbolList(); IList <Entities.Security> securityList = symbolToSecurityMapper.MapSymbolToSecurity(symbolList); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: {securityList.Count} Securities from IEXCloud retrieved"); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: Saving {securityList.Count} Securities"); securityService.AddSecurityList(session, securityList); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: {securityList.Count} Securities saved"); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: Creating SecurityListResponse"); SecurityListResponse response = BuildSecurityListResponse(session, requestFromQueue.RequestDate, requestFromQueue.MessageId); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: SecurityListResponse created with {response.SecurityList?.Count} Securities"); channel.PublishMessageOnQueue(response, Queues.SecurityListResponseQueue); logger.Log(LogLevel.Info, $"[SecurityListRequest: RequestDate {requestFromQueue.RequestDate}, MessageId {requestFromQueue.MessageId}]: SecurityListResponse published on queue {Queues.SecurityListResponseQueue}"); requestService.SetRequestStatus(session, requestFromDb, RequestStatus.Done); channel.SendAck(e.DeliveryTag); } } catch (JsonException jsonException) { logger.Log(LogLevel.Error, jsonException, jsonException.Message); channel.SendAck(e.DeliveryTag); } catch (Exception exception) { logger.Log(LogLevel.Error, exception, exception.Message); channel.SendNack(e.DeliveryTag); } }