File: /var/www/api_matriculas/app/Services/RegionService.php
<?php
namespace App\Services;
use App\Http\Resources\RegionResource;
use App\Repositories\RegionRepository;
use Exception;
class RegionService
{
protected $regionRepository;
public function __construct(
RegionRepository $regionRepository
) {
$this->regionRepository = $regionRepository;
}
public function list($allData = true)
{
$registers = $this->regionRepository->getAll();
if ($registers->count() < 1) {
return [];
}
return $registers->map(fn($row) => new RegionResource($row, $allData));
}
public function store($request)
{
$validateField = $this->regionRepository->getByName($request);
if ($validateField) {
throw new Exception("Región ya existe en la base de datos", 409);
}
$request->slug = getSlug($request->region);
$validateCode = $this->regionRepository->getByCode($request->code, null);
if ($validateCode) {
throw new Exception("Código de Región ya existe en la base de datos", 409);
}
$register = $this->regionRepository->create((object)$request);
if (!$register) {
throw new Exception("Ocurrió un problema al registrar Región", 500);
}
return $this->show($register->id, true);
}
public function update($request, $id)
{
$register = $this->show($id, true);
$validateField = $this->regionRepository->getByName($request->region, $id);
if ($validateField) {
throw new Exception("Región ya existe en la base de datos", 409);
}
$request->slug = getSlug($request->region);
$validateCode = $this->regionRepository->getByCode($request->code, $id);
if ($validateCode) {
throw new Exception("Código de Región ya existe en la base de datos", 409);
}
$update = $this->regionRepository->update($register, $request);
if (!$update) {
throw new Exception("Ocurrió un problema al actualizar registro", 500);
}
return $update;
}
public function show($id, $allData = false)
{
$register = $this->regionRepository->getById($id);
if (!$register) {
throw new Exception("Región no existe o fue eliminada", 400);
}
if ($allData) {
return $register;
}
return (object)(new RegionResource($register))->resolve();
}
public function delete($id)
{
$register = $this->show($id);
if (!$register->delete()) {
throw new Exception("Ocurrió un problema al eliminar registro", 500);
}
return true;
}
}