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)); }
public async Task ClaimAsync(DatabaseContext context, long userId) { var rewards = await context.Rewards .Where(o => o.UserId == userId) .AsTracking() .Where(o => o.Claimed == null) .ToListAsync(); foreach (var reward in rewards) { reward.Claimed = dateTimeProvider.Now; context.AddRange(rewardFactory.Claim(reward).ToList()); } }