File: /var/www/api_matriculas/app/Http/Controllers/ProfileController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Profile\StoreProfileRequest;
use App\Http\Requests\Profile\UpdateProfileRequest;
use App\Http\Requests\Profile\ProfilePermissionsMatrixRequest;
use App\Services\ProfileService;
use Exception;
class ProfileController extends Controller
{
protected $profileService;
public function __construct(ProfileService $profileService)
{
$this->profileService = $profileService;
}
public function list($allData = false)
{
try {
$data = $this->profileService->list($allData);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
public function store(StoreProfileRequest $request)
{
try {
$data = $this->profileService->store($request);
return genericResponse(['data' => $data, 'message' => 'Perfil Creado Correctamente', 'code' => 201], 201);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
public function update($id, UpdateProfileRequest $request)
{
try {
$data = $this->profileService->update($request, $id);
return genericResponse(['data' => null, 'message' => null, 'code' => 204], 204);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
public function show($id)
{
try {
$data = $this->profileService->show($id);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
public function destroy($id)
{
try {
$data = $this->profileService->delete($id);
return genericResponse(['data' => null, 'message' => 'Perfil Eliminado correctamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Get all permissions grouped by category
*/
public function getPermissions()
{
try {
$data = $this->profileService->getPermissions();
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Update permissions matrix for all profiles
*/
public function updatePermissionsMatrix(ProfilePermissionsMatrixRequest $request)
{
try {
$profilesMatrix = $request->validated()['profiles'];
$this->profileService->updatePermissionsMatrix($profilesMatrix);
return genericResponse([
'data' => null,
'message' => 'Matriz de permisos actualizada correctamente',
'code' => 200
], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ?: 500);
}
}
}