File: /var/www/api_matriculas/app/Repositories/ProfileRepository.php
<?php
namespace App\Repositories;
use App\Models\Profile;
use Exception;
use Illuminate\Support\Facades\DB;
class ProfileRepository
{
public function getAll()
{
$registers = Profile::where('deleted', false)->where('status', true);
if (auth()->check() && auth()->user()->profile->code != 'root') {
$registers->where('show_user', true);
}
return $registers->get();
}
public function getById($id)
{
$register = Profile::find($id);
if (!$register) {
throw new Exception("Perfil no existe o fue eliminado", 404);
}
return $register;
}
/**
* Obtiene un perfil por su código
*
* @param string $code
* @param int|null $id
* @return Profile|false
*/
public function getByCode($code, $id = null)
{
$query = Profile::where('code', $code);
if ($id > 0) {
$query->where('id', '!=', $id);
}
$register = $query->first();
if (!$register) {
return false;
}
return $register;
}
public function create($data)
{
return Profile::create([
'profile' => strUpper($data->profile),
'code' => strLower($data->code),
'description' => !empty($data->description) ? $data->description : null,
'show_user' => $data->show_user == 1 ? true : false,
'status' => $data->status == 0 ? false : true,
'created_at' => now(),
'user_created' => auth()->user()->id
]);
}
public function update($register, $data)
{
$register->profile = strUpper($data->profile);
$register->code = strLower($data->code);
$register->description = !empty($data->description) ? $data->description : null;
$register->show_user = $data->show_user == 1 ? true : false;
$register->status = $data->status == 0 ? false : true;
$register->updated_at = now();
$register->user_updated = auth()->user()->id;
if ($register->save()) {
return true;
}
return false;
}
/**
* Get all profiles with their permissions loaded
*/
public function getAllWithPermissions()
{
return Profile::with('permissions')
->where('show_user', true)
->where('deleted', false)
->orderBy('id', 'asc')
->get();
}
/**
* Update permissions matrix for all profiles
*
* @param array $profilesMatrix Array with structure ["1" => [1,2,3], "2" => [4,5,6]]
* @return bool
*/
public function updatePermissionsMatrix($profilesMatrix)
{
try {
DB::beginTransaction();
foreach ($profilesMatrix as $profileId => $permissionIds) {
$profile = Profile::where('deleted', false)->find($profileId);
if ($profile) {
$permissionIds = is_array($permissionIds) ? $permissionIds : [];
$profile->permissions()->sync($permissionIds);
}
}
DB::commit();
return true;
} catch (\Exception $e) {
DB::rollBack();
throw new Exception("Error al actualizar matriz de permisos: " . $e->getMessage(), 500);
}
}
}