public IHttpActionResult Post(HoldingTransactionCreate model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var userId = Guid.Parse(User.Identity.GetUserId());

            var holdingservice = new HoldingService(userId);
            var walletService  = new WalletService(userId);
            var service        = CreateHoldingTransactionService();

            var usdValue = model.CryptoTransactionAmount * model.MarketValue;

            if (walletService.GetWallet().WalletBalance - usdValue < 0)
            {
                return(BadRequest());
            }

            if (!service.CreateHoldingTransaction(model))
            {
                return(InternalServerError());
            }

            walletService.UpdateWalletBalance(-usdValue);

            holdingservice.UpdateHoldingBalance(model.HoldingId, model.CryptoTransactionAmount);

            return(Ok());
        }
Example #2
0
        public bool CreateHoldingTransaction(HoldingTransactionCreate model)
        {
            var entity =
                new HoldingTransaction()
            {
                HoldingId = model.HoldingId,
                CryptoTransactionAmount = model.CryptoTransactionAmount,
                MarketValue             = model.MarketValue,
                TransactionDate         = DateTimeOffset.UtcNow
            };

            using (var ctx = new ApplicationDbContext())
            {
                ctx.HoldingTransactions.Add(entity);
                return(ctx.SaveChanges() == 1);
            }
        }