public ActionResult MakeTransfer([FromBody] TransferDto data) { var userId = userManager.GetUserId(User); var user = context.Users.Include(x => x.Wallets).FirstOrDefault(x => x.Id == userId); if (!user.Wallets.Any(x => x.Currency == data.Currency)) { return(BadRequest()); } var source = user.Wallets.FirstOrDefault(x => x.Currency == data.Currency); if (source.Amount < data.Amount) { return(BadRequest()); } var destinationUser = context.Users.Include(x => x.Wallets).FirstOrDefault(x => x.UserName == data.Username); if (destinationUser == null) { throw new NotFoundException(); } var destination = destinationUser.Wallets.FirstOrDefault(x => x.Currency == data.Currency); if (destination == null) { destination = new Wallet { Amount = 0, Currency = data.Currency }; destinationUser.Wallets.Add(destination); } source.Amount -= data.Amount; destination.Amount += data.Amount; var transaction = new Transaction { Amount = data.Amount, Date = DateTime.Now, DestinationWalletId = destination.Id, SourceWalletId = source.Id }; context.Add(transaction); context.SaveChanges(); return(Ok()); }
public IActionResult CreateWallet([FromQuery] string currency) { var userId = userManager.GetUserId(User); var wallet = new Wallet { Amount = 0, Currency = currency }; var user = context.Users.Include(x => x.Wallets).FirstOrDefault(x => x.Id == userId); if (user.Wallets == null) { user.Wallets = new List <Wallet>(); } user.Wallets.Add(wallet); context.SaveChanges(); return(Ok()); }