public ActionResult <Purchase> PostPurchase([FromBody] PurchaseCreationDTO purchaseCreationDTO, [FromHeader] string key)
        {
            try
            {
                //just autorized users can access
                if (!auth.AuthorizeUser(key))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, "Authorization failed!"));
                }


                Purchase purchase = mapper.Map <Purchase>(purchaseCreationDTO);


                purchaseRepository.CreatePurchase(purchase);
                purchaseRepository.SaveChanges();

                logger.Log(LogLevel.Information, contextAccessor.HttpContext.TraceIdentifier, "", "Create new purchase", null);

                string location = linkGenerator.GetPathByAction("GetPurchaseById", "Purchase", new { purchaseId = purchase.PurchaseId });
                return(Created(location, purchase));
            }
            catch (Exception ex)
            {
                logger.Log(LogLevel.Error, contextAccessor.HttpContext.TraceIdentifier, "", "Error while creating purchase", null);
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
        public async Task <ActionResult> Post([FromBody] PurchaseCreationDTO purchaseCreation)
        {
            var purchases = await context.Purchases.Where(x =>
                                                          x.UserId == purchaseCreation.UserId &&
                                                          x.Date.Month == DateTime.Today.Month &&
                                                          x.IsoCurrency == purchaseCreation.IsoCurrency.ToUpper())
                            .ToListAsync();

            var selectedCurrency = currencys.SingleOrDefault(x => x.CurrencyIso == purchaseCreation.IsoCurrency.ToUpper());
            var purchaseData     = await selectedCurrency.GetPurchaseData(purchases, purchaseCreation.Amount);

            if (!purchaseData.EnabledPurchase)
            {
                logger.LogWarning($"purchase denaid, User ID {purchaseCreation.UserId}");
                return(BadRequest());
            }

            var purchase = mapper.Map <Purchase>(purchaseCreation);

            purchase.Date = DateTime.Now;
            purchase.AmountCurrencyPurchased = purchaseData.AmountCurrencyPurchased;
            purchase.ExchangeRate            = purchaseData.ExchangeRate;
            purchase.SellRate = purchaseData.Sell;
            purchase.BuyRate  = purchaseData.Buy;

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

            var purchaseDTO = mapper.Map <PurchaseDTO>(purchase);

            purchaseDTO.Date = purchase.Date;
            purchaseDTO.AmountCurrencyPurchased = purchase.AmountCurrencyPurchased;

            logger.LogInformation($"Purchase Succes, User ID {purchaseCreation.UserId}");
            return(new CreatedAtRouteResult("GetPurchase", new { id = purchase.Id }, purchaseDTO));
        }