public async Task <ActionResult <InventoryItemDto> > GrantItemsAsync(GiveOrTakeItemsDto giveOrTakeItemsDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var inventoryItem = await _inventoryRepository.GetAsync(item =>
                                                                    item.UserId == giveOrTakeItemsDto.UserId && item.CatalogItemId == giveOrTakeItemsDto.CatalogItemId);

            if (inventoryItem == null)
            {
                inventoryItem = giveOrTakeItemsDto.AsEntity();

                await _inventoryRepository.CreateAsync(inventoryItem);
            }
            else
            {
                if (giveOrTakeItemsDto.Quantity < 0 && (inventoryItem.Quantity + giveOrTakeItemsDto.Quantity) < 0)
                {
                    return(BadRequest("Player can't have negative number of items in inventory."));
                }

                inventoryItem.Quantity += giveOrTakeItemsDto.Quantity;
                await _inventoryRepository.UpdateAsync(inventoryItem);
            }

            var catalogItem = await _catalogRepository.GetAsync(giveOrTakeItemsDto.CatalogItemId);

            return(Ok(inventoryItem.AsDto(catalogItem.Name, catalogItem.Description)));
        }
Beispiel #2
0
 public static InventoryItem AsEntity(this GiveOrTakeItemsDto giveOrTakeItemsDto)
 {
     return(new()
     {
         Id = Guid.NewGuid(),
         CatalogItemId = giveOrTakeItemsDto.CatalogItemId,
         UserId = giveOrTakeItemsDto.UserId,
         Quantity = giveOrTakeItemsDto.Quantity,
         AcquiredDate = DateTimeOffset.Now
     });
 }