public async Task <ActionResult <IEnumerable <ItemDto> > > SalvageInventory([FromServices] IEquipmentSalvager equipmentSalvager)
        {
            var userId = User.Claims.GetUserId();

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

            var equipment = await Context.Equipment
                            .Include(o => o.Option)
                            .Where(o => o.FighterId == null && o.UserId == userId)
                            .Where(o => o.Option == null || !o.Option.IsFavorite)
                            .ToListAsync();

            var items = new List <Item>();

            foreach (var equip in equipment)
            {
                items.AddRange(equipmentSalvager.Salvage(equip, userId.Value).ToList());
                Context.Remove(equip);
            }

            Context.AddRange(items);
            await Context.SaveChangesAsync();

            return(Ok(Mapper.Map <IEnumerable <ItemDto> >(items)));
        }
        public async Task <ActionResult <IEnumerable <ItemDto> > > SalvageEquipment([FromBody] EquipmentDto dto, [FromServices] IEquipmentSalvager equipmentSalvager)
        {
            var userId = User.Claims.GetUserId();

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

            var equipment = await Context.Equipment
                            .Where(o => o.UserId == userId)
                            .FirstOrDefaultAsync(o => o.Id == dto.Id);

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

            var items = equipmentSalvager.Salvage(equipment, userId.Value).ToList();

            Context.Remove(equipment);
            Context.AddRange(items);
            await Context.SaveChangesAsync();

            return(Ok(Mapper.Map <IEnumerable <ItemDto> >(items)));
        }
        public async Task ProvideAsync(DatabaseContext context, SeasonSummary summary)
        {
            var equipment = await context.Equipment
                            .Where(o => o.UserId == summary.UserId)
                            .AsTracking()
                            .ToListAsync();

            var salvageItems = new List <Item>();

            foreach (var equip in equipment)
            {
                salvageItems.AddRange(equipmentSalvager.Salvage(equip, summary.UserId).Where(o => !EquipmentToken.Tokens.Contains(o.ItemId)));
            }

            summary.SalvageValue = salvageItems.Count;

            var alreadyTracked = context.ChangeTracker.Entries <Equipment>().Where(o => equipment.Any(e => e.Id == o.Entity.Id)).ToList();

            context.RemoveRange(equipment);
            context.AddRange(salvageItems);
        }