. */ namespace SP\Services\Config; use Exception; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\QueryException; use SP\Core\Exceptions\SPException; use SP\DataModel\ConfigData; use SP\DataModel\Dto\ConfigRequest; use SP\Repositories\Config\ConfigRepository; use SP\Repositories\NoSuchItemException; use SP\Services\Service; use SP\Services\ServiceException; /** * Class ConfigService * * @package SP\Services\Config */ final class ConfigService extends Service { protected ?ConfigRepository $configRepository = null; /** * @throws NoSuchItemException * @throws ServiceException */ public function getByParam(string $param, $default = null) { try { $result = $this->configRepository->getByParam($param); } catch (Exception $e) { throw new ServiceException( $e->getMessage(), SPException::ERROR, null, $e->getCode(), $e ); } if ($result->getNumRows() === 0) { if ($default === null) { throw new NoSuchItemException( sprintf(__('Parameter not found (%s)'), $param) ); } return $default; } /** @var ConfigData $data */ $data = $result->getData(); return empty($data->value) ? $default : $data->value; } /** * @throws ConstraintException * @throws QueryException */ public function create(ConfigData $configData): int { return $this->configRepository->create($configData); } /** * @throws ServiceException */ public function saveBatch(ConfigRequest $configRequest): void { try { $this->transactionAware( function () use ($configRequest) { foreach ($configRequest->getData() as $param => $value) { $this->save($param, $value); } } ); } catch (Exception $e) { processException($e); throw new ServiceException( $e->getMessage(), SPException::ERROR, null, $e->getCode(), $e ); } } /** * @throws ConstraintException * @throws QueryException */ public function save(string $param, $value): bool { if (!$this->configRepository->has($param)) { return $this->configRepository->create(new ConfigData($param, $value)); } return $this->configRepository->update(new ConfigData($param, $value)); } /** * Obtener un array con la configuración almacenada en la BBDD. * * @return ConfigData[] * @throws ConstraintException * @throws QueryException */ public function getAll(): array { return $this->configRepository->getAll()->getDataAsArray(); } /** * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Repositories\NoSuchItemException */ public function deleteByParam(string $param): void { if ($this->configRepository->deleteByParam($param) === 0) { throw new NoSuchItemException( sprintf(__('Parameter not found (%s)'), $param) ); } } /** * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ protected function initialize(): void { $this->configRepository = $this->dic->get(ConfigRepository::class); } }