using System.Collections.Generic; using System.Threading.Tasks; using DatabaseServer.Managers; using WingsAPI.Communication; using WingsAPI.Communication.DbServer.WarehouseService; using WingsAPI.Data.Account; namespace DatabaseServer.Services { public class AccountWarehouseService : IAccountWarehouseService { private readonly IAccountWarehouseManager _accountWarehouseManager; public AccountWarehouseService(IAccountWarehouseManager accountWarehouseManager) => _accountWarehouseManager = accountWarehouseManager; public async ValueTask GetItems(AccountWarehouseGetItemsRequest request) { IEnumerable warehouseItemDtos = await _accountWarehouseManager.GetWarehouse(request.AccountId); return new AccountWarehouseGetItemsResponse { ResponseType = warehouseItemDtos == null ? RpcResponseType.GENERIC_SERVER_ERROR : RpcResponseType.SUCCESS, Items = warehouseItemDtos }; } public async ValueTask GetItem(AccountWarehouseGetItemRequest request) { AccountWarehouseItemDto warehouseItemDto = await _accountWarehouseManager.GetWarehouseItem(request.AccountId, request.Slot); return new AccountWarehouseGetItemResponse { ResponseType = warehouseItemDto == null ? RpcResponseType.GENERIC_SERVER_ERROR : RpcResponseType.SUCCESS, Item = warehouseItemDto }; } public async ValueTask AddItem(AccountWarehouseAddItemRequest request) { AddWarehouseItemResult result = await _accountWarehouseManager.AddWarehouseItem(request.Item); return new AccountWarehouseAddItemResponse { ResponseType = result.Success ? RpcResponseType.SUCCESS : RpcResponseType.GENERIC_SERVER_ERROR, Item = result.UpdatedItem }; } public async ValueTask WithdrawItem(AccountWarehouseWithdrawItemRequest request) { WithdrawWarehouseItemResult result = await _accountWarehouseManager.WithdrawWarehouseItem(request.ItemToWithdraw, request.Amount); return new AccountWarehouseWithdrawItemResponse { ResponseType = result.Success ? RpcResponseType.SUCCESS : RpcResponseType.GENERIC_SERVER_ERROR, UpdatedItem = result.UpdatedItem, WithdrawnItem = result.WithdrawnItem }; } public async ValueTask MoveItem(AccountWarehouseMoveItemRequest request) { MoveWarehouseItemResult result = await _accountWarehouseManager.MoveWarehouseItem(request.WarehouseItemDtoToMove, request.Amount, request.NewSlot); return new AccountWarehouseMoveItemResponse { ResponseType = result.Success ? RpcResponseType.SUCCESS : RpcResponseType.GENERIC_SERVER_ERROR, OldItem = result.OldItem, NewItem = result.NewItem }; } } }