. */ namespace SP\Domain\Client\Ports; use SP\DataModel\ItemData; use SP\DataModel\ItemSearchData; use SP\Domain\Client\Models\Client; use SP\Domain\Common\Services\ServiceException; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Core\Exceptions\SPException; use SP\Infrastructure\Common\Repositories\DuplicatedItemException; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Infrastructure\Database\QueryResult; /** * Interface ClientServiceInterface */ interface ClientService { /** * @throws ConstraintException * @throws QueryException */ public function search(ItemSearchData $itemSearchData): QueryResult; /** * @throws NoSuchItemException * @throws ConstraintException * @throws QueryException */ public function getById(int $id): Client; /** * Returns the item for given name * * @throws ConstraintException * @throws QueryException * @throws NoSuchItemException */ public function getByName(string $name): ?Client; /** * @throws ConstraintException * @throws QueryException * @throws NoSuchItemException */ public function delete(int $id): ClientService; /** * @param int[] $ids * * @throws ServiceException * @throws ConstraintException * @throws QueryException */ public function deleteByIdBatch(array $ids): void; /** * @throws SPException * @throws DuplicatedItemException */ public function create(Client $client): int; /** * @param Client $client * * @return void * @throws SPException * @throws ConstraintException * @throws QueryException */ public function update(Client $client): void; /** * Get all items from the service's repository * * @return Client[] * @throws ConstraintException * @throws QueryException */ public function getAll(): array; /** * Returns all clients visible for a given user * * @return ItemData[] * @throws QueryException * @throws ConstraintException */ public function getAllForUser(): array; }