public async Task <IActionResult> BuyItem([FromBody] TransactionConfirmation transaction) { ApplicationUser user = await userManager.FindByIdAsync(User.FindFirst(ClaimTypes.NameIdentifier).Value); if (user == default) { return(Unauthorized()); } Auction auction = dbContext.Auctions.FirstOrDefault(x => x.Id == transaction.AuctionId); ApplicationUser recipient = await this.userManager.FindByIdAsync(auction.CreatorId); if (auction == default || recipient == default) { return(NotFound()); } if (user.Balance < auction.Price) { return(BadRequest(new { msg = "Balance is too low" })); } lock (dbContext.Auctions) { dbContext.Auctions.Remove(auction); FinishedAuction finishedAuction = new FinishedAuction() { Id = auction.Id, Price = auction.Price, BuyerId = user.Id, CreationTime = auction.CreationTime, CreatorId = auction.CreatorId, Description = auction.Description, IconId = auction.IconId, Title = auction.Title }; dbContext.FinishedAuctions.Add(finishedAuction); dbContext.Users.UpdateRange(new ApplicationUser[] { user, recipient }); user.Balance -= auction.Price; recipient.Balance += auction.Price; dbContext.SaveChanges(); } return(Ok()); }
private ContractTransaction prepareTxObject(string bindingid, BC.Offchain.Repository.Models.Profile CitizenProfile) { var _dto = CitizenProfile; _dto.TransactedTime = DateTime.Now; _dto.TransactionID = Guid.NewGuid().ToString(); TransactionConfirmation _transactionConfirmation = new TransactionConfirmation() { BlockHash = "0xfa4e2a31506c1f930efc7701ff6ddc1451d08a38a7a9267fe263766b4c7ea2d0", BlockNumber = "1", TransactionHash = "", Name = "Fake Contract", ProxyId = "Fake Contract_Proxy ID", TransactionIndex = "1" }; ContractTransaction _txInformation = new ContractTransaction(bindingid, " Enterprise Smart Contract transacted.....", _dto, _transactionConfirmation); return(_txInformation); }