Пример #1
0
        public async Task <SubmitTradeResponse> Post([FromBody] Trade trade)
        {
            var response = new SubmitTradeResponse();

            try
            {
                response = await _tradeProvider.EnqueueTradeRequest(trade);
            }
            catch (Exception ex)
            {
                response.Status = "Failure";
                response.Error  = new Error()
                {
                    ErrorCode    = "500",
                    ErrorMessage = "Internal Server Error"
                };
            }
            return(response);
        }
        public async Task <SubmitTradeResponse> EnqueueTradeRequest(Trade trade)
        {
            var submitTradeResponse = new SubmitTradeResponse()
            {
                Status = Constants.ResponseStatus.Success
            };

            try
            {
                var validationError = ValidateTrade(trade);
                if (validationError != null)
                {
                    submitTradeResponse.Status = Constants.ResponseStatus.Failure;
                    submitTradeResponse.Error  = validationError;
                }
                else
                {
                    trade.SubmitDateTime = DateTime.Now;

                    /*
                     * NOTE: Currently we are saving our stocks in a static list.
                     * Tomorrow, may be we might same them in the database.
                     * That is where async and await will be most useful.
                     */
                    _tradeQueue.Add(trade);
                    var currentQueueCount = _tradeQueue.Count();
                    trade.Id = currentQueueCount;
                    submitTradeResponse.TradeId = "R" + trade.Id;
                }
            }
            catch (Exception ex)
            {
                submitTradeResponse.Error  = GetError("500", "An Error occurred while submitting Trade request.");
                submitTradeResponse.Status = Constants.ResponseStatus.Failure;
            }
            return(submitTradeResponse);
        }