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))); }
public static InventoryItem AsEntity(this GiveOrTakeItemsDto giveOrTakeItemsDto) { return(new() { Id = Guid.NewGuid(), CatalogItemId = giveOrTakeItemsDto.CatalogItemId, UserId = giveOrTakeItemsDto.UserId, Quantity = giveOrTakeItemsDto.Quantity, AcquiredDate = DateTimeOffset.Now }); }