Files
oficial/app/src/Service/Direccion.php
aldarien 61c813fc08 feature/cierres (#30)
Reservas agregar y aprobar

Co-authored-by: Juan Pablo Vial <jpvialb@incoviba.cl>
Reviewed-on: #30
2025-09-11 15:16:12 -03:00

50 lines
1.5 KiB
PHP

<?php
namespace Incoviba\Service;
use PDOException;
use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Exception\ServiceAction;
use Incoviba\Model;
use Incoviba\Repository;
class Direccion extends Ideal\Service
{
public function __construct(LoggerInterface $logger, protected Repository\Direccion $direccionRepository)
{
parent::__construct($logger);
}
/**
* @param array $data
* @return Model\Direccion
* @throws ServiceAction\Create
*/
public function add(array $data): Model\Direccion
{
$dataMap = [
'street' => 'calle',
'number' => 'numero',
'comuna_id' => 'comuna',
];
foreach ($data as $key => $value) {
if (array_key_exists($key, $dataMap)) {
$data[$dataMap[$key]] = $value;
unset($data[$key]);
}
}
try {
return $this->direccionRepository->fetchByCalleAndNumeroAndExtraAndComuna($data['calle'], $data['numero'], $data['extra'], $data['comuna']);
} catch (Implement\Exception\EmptyResult) {
$filteredData = $this->direccionRepository->filterData($data);
$direccion = $this->direccionRepository->create($filteredData);
try {
return $this->direccionRepository->save($direccion);
} catch (PDOException $exception) {
throw new ServiceAction\Create(__CLASS__, $exception);
}
}
}
}