public async Task <ActionResult <EquipmentDto> > EnhanceEquipment([FromBody] EnhanceDto dto, [FromServices] IEquipmentEnhancer equipmentEnhancer)
        {
            var userId = User.Claims.GetUserId();

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

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

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

            var particles = await Context.Items
                            .Where(o => o.UserId == userId && o.ItemId == EmpoweredParticle.Id)
                            .Take(equipmentEnhancer.GetCost(equipment, dto.DesiredEnhancement))
                            .ToListAsync();

            equipmentEnhancer.Enhance(equipment, particles, dto.DesiredEnhancement);

            Context.RemoveRange(particles);
            await Context.SaveChangesAsync();

            return(Ok(Mapper.Map <EquipmentDto>(equipment)));
        }
        public async Task <ActionResult <int> > GetEnhancementCosts([FromBody] EnhanceDto dto, [FromServices] IEquipmentEnhancer equipmentEnhancer)
        {
            var userId = User.Claims.GetUserId();

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

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

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

            return(Ok(equipmentEnhancer.GetCost(equipment, dto.DesiredEnhancement)));
        }