File: /var/www/api_matriculas/app/Services/ConfigurationService.php
<?php
namespace App\Services;
use App\Http\Resources\ConfigurationResource;
use App\Models\ContractFormat;
use App\Repositories\ConfigurationRepository;
use App\Repositories\ParentRepository;
use Exception;
class ConfigurationService
{
protected $configurationRepository;
protected $parentRepository;
public function __construct(
ConfigurationRepository $configurationRepository,
ParentRepository $parentRepository
) {
$this->configurationRepository = $configurationRepository;
$this->parentRepository = $parentRepository;
}
public function showByCode($code, $mapper = true)
{
$register = $this->configurationRepository->getByCode($code);
if (!$register) {
throw new Exception("Configuración no existe o fue eliminada", 400);
}
if ($mapper) {
return (object)(new ConfigurationResource($register))->resolve();
}
return $register;
}
public function storeOrUpdate($requestData)
{
$register = $this->configurationRepository->getByCode($requestData->code);
if (!$register) {
throw new Exception("Configuración no existe o fue eliminada", 400);
}
$encodedData = $requestData->input('data');
$config = json_decode(base64_decode($encodedData), true);
$mappedFields = ConfigurationResource::mapFields($config, $requestData->code);
// Validar que el RUT genérico de Toku no exista como apoderado
if ($requestData->code === 'toku' && !empty($mappedFields['generic_rut'])) {
$formattedRut = formatterRut($mappedFields['generic_rut'], false);
$existingParent = $this->parentRepository->getByRut($formattedRut);
if ($existingParent) {
throw new Exception("El RUT genérico ingresado ya está registrado como apoderado ({$existingParent->first_name} {$existingParent->last_name}). Utilice un RUT que no esté en uso.", 409);
}
}
$register->data_fields = json_encode((object)$mappedFields);
$update = $this->configurationRepository->updateOrCreate($register);
if (!$update) {
throw new Exception("Ocurrió un problema al actualizar registro", 500);
}
return $update;
}
}