public async Task <ActionResult <PutResult> > PutExteralApplicationPayment(Guid id, string discordId) { var discordIdul = ulong.Parse(discordId); var exteralApplicationPayment = await _context.ExteralApplicationPayments .Include(c => c.ExteralApplication) .AsQueryable() .FirstOrDefaultAsync(c => c.Id == id && c.DiscordId == discordIdul); if (exteralApplicationPayment == null) { return(NotFound()); } if (exteralApplicationPayment.ExpirationDate <= DateTimeOffset.Now) { return(new PutResult { IsSucceed = false, ErrorMessage = "有効期限切れ" }); } if (exteralApplicationPayment.IsPayd) { return(new PutResult { IsSucceed = false, ErrorMessage = "支払い済みのデータです" }); } //TODO:トランザクションを作る var venderId = exteralApplicationPayment.ExteralApplication.VetMemberId; var buyMember = await _context.VetMembers.AsQueryable().FirstOrDefaultAsync(c => c.DiscordId == discordIdul); var lestAmount = CoreService.CalcAmount(buyMember); if (lestAmount < exteralApplicationPayment.Amount) { return(new PutResult { IsSucceed = false, ErrorMessage = "残高不足" }); } var transaction = new CoinTransaction { SendeVetMemberId = buyMember.Id, RecivedVetMemberId = venderId, Amount = exteralApplicationPayment.Amount, Text = $"外部購入:{exteralApplicationPayment.ExteralApplication.Name}:{exteralApplicationPayment.Id}", }; exteralApplicationPayment.IsPayd = true; _context.CoinTransactions.Add(transaction); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ExteralApplicationPaymentExists(id)) { return(new PutResult { IsSucceed = false, ErrorMessage = "DB書き込みに失敗しました。", }); } else { throw; } } return(new PutResult { IsSucceed = true, }); }
private async Task <IActionResult> Buy(int id) { var vender = await DbContext.Venders .Include(c => c.VetMember) .FirstOrDefaultAsync(c => c.Id == id); if (vender == null) { return(NotFound()); } var userContext = CoreService.GetUserContext(); //var escrowUser = DbContext.VetMembers.FirstOrDefault(c => c.MemberType == MemberType.Escrow); if ((userContext.Amount - Amount) < 0) { IsBuyError = true; ErrorMessage = "残高不足です"; return(await OnGetAsync(id)); } if (Amount < 0) { IsBuyError = true; ErrorMessage = "マイナスの値は入力不可です"; return(await OnGetAsync(id)); } var coinTransaction = new CoinTransaction { SendeVetMemberId = userContext.CurrentUser.Id, RecivedVetMemberId = vender.VetMemberId, Amount = Amount, Text = $"{vender.Title} にて購入 {Amount}{StaticSettings.CurrenryUnit} {BuyMessage}", TransactionType = CoinTransactionType.Vender }; var venderSale = new VenderSale { Amount = Amount, Message = BuyMessage, VenderId = vender.Id, VetMemberId = userContext.CurrentUser.Id, }; DbContext.VenderSales.Add(venderSale); DbContext.CoinTransactions.Add(coinTransaction); await DbContext.SaveChangesAsync(); //if (vender.IsSalesPublicNotification && IsBuyNotification) //{ // await WebHookNotification(userContext, vender, venderSale); //} if (vender.IsSalesNotification) { await SalesNotification(userContext, vender, venderSale); } if (vender.HasDeliveryMessage) { await DeliveryMessage(userContext, vender, venderSale); } return(RedirectToPage("Details", new { id = id })); }