コード例 #1
0
        /// <summary>
        /// Добавление сведений о заказе в историю заказов
        /// </summary>
        public async Task <OrderInfo> AddOrder(User user, PaymentInfoCache paymentInfoCache, SessionInfo sessionInfo)
        {
            using (var transaction = await dbContext.Database.BeginTransactionAsync())
            {
                var orderGamesDto = await AddOrderGamesDto(paymentInfoCache);

                var orderSellersDto = await AddOrderSellersDto(paymentInfoCache);

                var orderSessionsDto = await AddOrderSessionsDto(sessionInfo);

                var orderDto = GetOrderDto(orderGamesDto, orderSellersDto, orderSessionsDto, paymentInfoCache, user);

                await dbContext.Orders.AddAsync(orderDto);

                await dbContext.SaveChangesAsync();

                await transaction.CommitAsync();

                return(new OrderInfo
                {
                    Id = orderDto.Id,
                    UserId = orderDto.UserId,
                    Key = orderDto.Key,
                    DateTime = orderDto.DateTime.ToString(CultureInfo.InvariantCulture),
                    RecipientEmail = orderDto.RecipientEmail,
                    Amount = orderDto.Amount,
                    Game = orderGamesDto
                });
            }
        }
コード例 #2
0
        /// <summary>
        /// Распределение денежных средств между плафтормой и продацом
        /// </summary>
        private async Task <Earnings> DistributeMoney(PaymentInfoCache paymentInfoCache)
        {
            var commission = paymentInfoCache.Amount / 100 * CommissionPercentage;

            var sellerBalance = dbContext.Balances.FirstOrDefault(balance =>
                                                                  balance.UserId == paymentInfoCache.Game.SellerId);
            var platformStats = dbContext.PlatformStatistics.FirstOrDefault();

            if (sellerBalance == null || platformStats == null)
            {
                throw new ArgumentException("Не удалось выполнить пополнение баланса");
            }

            var sellerIncome = paymentInfoCache.Amount - commission;

            sellerBalance.Value   += sellerIncome;
            platformStats.Balance += commission;

            using (var transaction = await dbContext.Database.BeginTransactionAsync())
            {
                dbContext.Balances.Update(sellerBalance);
                dbContext.PlatformStatistics.Update(platformStats);
                await dbContext.SaveChangesAsync();

                await transaction.CommitAsync();
            }

            return(new Earnings
            {
                Commission = commission,
                Income = sellerIncome
            });
        }
コード例 #3
0
        /// <summary>
        /// Добавление набора игровых ключей для игры
        /// </summary>
        public async Task AddKeystore(AddKeystoreRequest addKeystoreRequest)
        {
            var isOwner = await UserIsOwnerOfGame(addKeystoreRequest.GameId);

            if (!isOwner)
            {
                throw new ArgumentException("Невозможно добавить игровые ключи");
            }

            var keys = addKeystoreRequest.Keys.Select(key => new KeyDto
            {
                Id       = 0,
                GameId   = addKeystoreRequest.GameId,
                Key      = key,
                Reserved = false
            });

            await dbContext.Keys.AddRangeAsync(keys);

            await dbContext.SaveChangesAsync();
        }
コード例 #4
0
        /// <summary>
        /// Инициализация баланса нового продавца
        /// </summary>
        private async Task InitBalance(SignUp signUp)
        {
            if (signUp.Role == Roles.Seller)
            {
                await dbContext.Balances.AddAsync(new BalanceDto
                {
                    UserId = (await userManager.FindByEmailAsync(signUp.Email)).Id,
                    Value  = 0
                });

                await dbContext.SaveChangesAsync();
            }
        }
コード例 #5
0
        /// <summary>
        /// Добавление новой игры
        /// </summary>
        public async Task <GameDto> AddGame(AddGameRequest addGameRequest)
        {
            var game = GameToGameDto(addGameRequest);
            await dbContext.Games.AddAsync(game);

            await dbContext.SaveChangesAsync();

            var keystore = new AddKeystoreRequest
            {
                GameId = game.Id,
                Keys   = addGameRequest.Keys
            };

            await keystoreService.AddKeystore(keystore);

            return(game);
        }