コード例 #1
0
        public async Task <ActionResult <RewardContentDto> > ClaimAll()
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var rewards = await Context.Rewards
                          .AsTracking()
                          .Where(o => o.Claimed == null && o.UserId == userId)
                          .ToListAsync();

            if (!rewards.Any())
            {
                return(BadRequest());
            }

            var rewarded = new List <IReward>();

            foreach (var reward in rewards)
            {
                reward.Claimed = dateTimeProvider.Now;
                var items = rewardFactory.Claim(reward).ToList();
                rewarded.AddRange(items);

                foreach (var item in items)
                {
                    Context.Add(item);
                }
            }

            await Context.SaveChangesAsync();

            var content = new RewardContentDto()
            {
                Items     = Mapper.Map <ICollection <ItemDto> >(rewarded.OfType <Item>()),
                Equipment = Mapper.Map <ICollection <EquipmentDto> >(rewarded.OfType <Equipment>()),
            };

            return(Ok(content));
        }
コード例 #2
0
        public async Task <ActionResult <RewardContentDto> > ClaimReward([FromBody] RewardDto dto)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var reward = await Context.Rewards
                         .AsTracking()
                         .Where(o => o.Claimed == null)
                         .FirstOrDefaultAsync(o => o.Id == dto.Id && o.RewardPoolId == dto.PoolId && o.UserId == userId);

            if (reward == null)
            {
                return(BadRequest(new InvalidRewardException()));
            }

            reward.Claimed = dateTimeProvider.Now;

            var items = rewardFactory.Claim(reward).ToList();

            foreach (var item in items)
            {
                Context.Add(item);
            }

            await Context.SaveChangesAsync();

            var content = new RewardContentDto()
            {
                Items     = Mapper.Map <ICollection <ItemDto> >(items.OfType <Item>()),
                Equipment = Mapper.Map <ICollection <EquipmentDto> >(items.OfType <Equipment>()),
            };

            return(Ok(content));
        }
コード例 #3
0
        public async Task <ActionResult <RewardContentDto> > Buy([FromBody] ShopItemDto dto, [FromServices] IEquipmentGenerator equipmentGenerator)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var item = ShopInventory.Items.FirstOrDefault(o => o.ItemId == dto.ItemId && o.Rarity == dto.Rarity);

            if (item == null)
            {
                return(BadRequest());
            }

            foreach (var price in item.Prices)
            {
                var currencies = await Context.Items
                                 .Where(o => o.UserId == userId)
                                 .Where(o => o.ItemId == price.CurrencyItemId)
                                 .Take(price.Quantity)
                                 .ToListAsync();

                if (currencies.Count != price.Quantity)
                {
                    return(BadRequest());
                }

                Context.RemoveRange(currencies);
            }

            var content = new RewardContentDto();

            if (EquipmentConstants.IsEquipmentConstant(item.ItemId))
            {
                var fighterLevel = await Context.Fighters
                                   .Where(o => o.UserId == userId)
                                   .MaxAsync(o => o.Level);

                var itemLevel = fighterLevel.NearestBase(8);
                if (itemLevel < 1)
                {
                    itemLevel = 1;
                }

                var equipment = equipmentGenerator.GenerateEquipment(item.ItemId, itemLevel, item.Rarity, userId.Value);
                Context.Add(equipment);
                content.Equipment.Add(Mapper.Map <EquipmentDto>(equipment));
            }
            else
            {
                var boughtItem = new Item()
                {
                    ItemId = item.ItemId,
                    UserId = userId.Value,
                };

                Context.Items.Add(boughtItem);
                content.Items.Add(Mapper.Map <ItemDto>(boughtItem));
            }

            await Context.SaveChangesAsync();

            return(Ok(content));
        }