Beispiel #1
0
        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,
            });
        }
Beispiel #2
0
        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 }));
        }