HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/matriculas_api_dev/app/Services/CountryService.php
<?php

namespace App\Services;

use App\Http\Resources\CountryResource;
use App\Repositories\CountryRepository;
use Exception;

class CountryService
{

    protected $countryRepository;

    public function __construct(
        CountryRepository   $countryRepository
    ) {
        $this->countryRepository = $countryRepository;
    }


    public function list($allData = true)
    {
        $registers = $this->countryRepository->getAll();
        if ($registers->count() < 1) {
            return [];
        }

        return $registers->map(fn($row) => new CountryResource($row, $allData));
    }


    public function store($request)
    {
        $validateField = $this->countryRepository->getByName($request->gender);
        if ($validateField) {
            throw new Exception("Nombre de País ya existe en la base de datos", 409);
        }

        $register = $this->countryRepository->create((object)$request);
        if (!$register) {
            throw new Exception("Ocurrió un problema al registrar", 500);
        }

        return $this->show($register->id, false);
    }

    public function update($request, $id)
    {
        $register = $this->show($id, true);

        $validateField = $this->countryRepository->getByName($request->gender, $id);
        if ($validateField) {
            throw new Exception("País ya existe en la base de datos", 409);
        }

        $update = $this->countryRepository->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->countryRepository->getById($id);

        if (!$register) {
            throw new Exception("País no existe o fue eliminado", 400);
        }
        if ($allData) {
            return $register;
        }
        return (object)(new CountryResource($register))->resolve();
    }


    public function delete($id)
    {
        $register = $this->show($id, true);

        if (!$register->delete()) {
            throw new \Exception("Ocurrió un problema al eliminar registro", 500);
        }

        return true;
    }
}