예제 #1
0
        public async Task <QuotesUploadErrorCode> UploadMissingQuotesAsync([FromBody] UploadMissingQuotesRequest request)
        {
            if (!DateTime.TryParse(request.TradingDay, out var tradingDay))
            {
                await _log.WriteWarningAsync(nameof(PricesController),
                                             nameof(UploadMissingQuotesAsync),
                                             request.TradingDay,
                                             "Couldn't parse trading day");

                return(QuotesUploadErrorCode.InvalidTradingDay);
            }

            var draftExists = await _draftSnapshotKeeper
                              .Init(tradingDay)
                              .ExistsAsync();

            if (!draftExists)
            {
                return(QuotesUploadErrorCode.NoDraft);
            }

            try
            {
                await _snapshotService.MakeTradingDataSnapshotFromDraft(
                    request.CorrelationId,
                    request.Cfd,
                    request.Forex);
            }
            catch (InvalidOperationException e)
            {
                await _log.WriteErrorAsync(nameof(PricesController), nameof(UploadMissingQuotesAsync), null, e);

                return(QuotesUploadErrorCode.AlreadyInProgress);
            }
            catch (EmptyPriceUploadException e)
            {
                await _log.WriteErrorAsync(nameof(PricesController), nameof(UploadMissingQuotesAsync), null, e);

                return(QuotesUploadErrorCode.EmptyQuotes);
            }

            return(QuotesUploadErrorCode.None);
        }