예제 #1
0
        public async Task <ObjectResult> PostPurchase(PurchaseDto purchaseDto)
        {
            var currency = await _context.Currencies.FirstOrDefaultAsync(x => x.Id == purchaseDto.CurrencyId);

            if (currency == null)
            {
                return(new BadRequestObjectResult(new ApiResponseDto
                {
                    Success = false,
                    Message = "Currency not found"
                }));
            }


            var currencyPrice = await _currencyPriceServices.GetPriceByCurrencyName(currency.Source);

            if (currencyPrice == null)
            {
                return(new BadRequestObjectResult(new ApiResponseDto
                {
                    Success = false,
                    Message = "Could not get the currency price"
                }));
            }
            var price = currency.MultiplyBy.HasValue ? currencyPrice.Buy * currency.MultiplyBy.Value : currencyPrice.Buy;

            var today                   = DateTimeOffset.Now;
            var firstDayOfMonth         = new DateTime(today.Year, today.Month, 1);
            var lastDayOfMonth          = firstDayOfMonth.AddMonths(1).AddDays(-1);
            var purchasesInCurrentMonth = await _context.Purchases.Where(x =>
                                                                         x.UserId == purchaseDto.UserId &&
                                                                         x.CreatedDate > firstDayOfMonth &&
                                                                         x.CreatedDate < lastDayOfMonth).SumAsync(x => x.Quantity / x.Price);

            if (purchasesInCurrentMonth + purchaseDto.Quantity / price > currency.MonthlyLimit)
            {
                return(new BadRequestObjectResult(new ApiResponseDto
                {
                    Success = false,
                    Message = $"Purchase limit for this currency is {currency.MonthlyLimit} by month"
                }));
            }

            var purchase = new Purchase
            {
                UserId     = purchaseDto.UserId,
                Quantity   = purchaseDto.Quantity,
                Price      = price,
                CurrencyId = purchaseDto.CurrencyId
            };

            _context.Purchases.Add(purchase);
            await _context.SaveChangesAsync();

            return(new OkObjectResult(new ApiResponseDto
            {
                Success = true
            }));
        }
예제 #2
0
        public async Task <IActionResult> GetCurrenciesPrices()
        {
            var currencies = await _context.Currencies.Where(x => !x.Disabled).ToListAsync();

            var result = new List <CurrencyPriceDto>();

            foreach (var currency in currencies)
            {
                var currencyPrice = await _currencyPriceServices.GetPriceByCurrencyName(currency.Source);

                currencyPrice.Name = currency.Name;
                result.Add(currencyPrice);
            }
            return(new OkObjectResult(result));
        }