Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/amarcano568/pensionalamedida/llms.txt

Use this file to discover all available pages before exploring further.

El módulo de Perfil de Usuario de Pensión a la Medida permite a cada usuario autenticado consultar sus datos personales, actualizar su información de perfil y cambiar su contraseña de acceso, todo desde la interfaz web sin necesidad de intervención del administrador. Las rutas de este módulo están protegidas por el middleware auth y operan sobre la sesión activa del navegador; la identidad del usuario se obtiene a través de Auth::user() en cada operación.

Ver perfil

Carga la vista principal del perfil de usuario. Esta ruta simplemente retorna la plantilla Blade que contiene el formulario de perfil; los datos se cargan de forma asíncrona mediante el endpoint GET /buscar-perfil.
MétodoRutaControladorVista retornada
GET/ver-perfilPerfilController@verPerfilperfiles.perfil
Ejemplo de petición:
GET /ver-perfil
El controlador simplemente retorna la vista:
public function verPerfil()
{
    return view('perfiles.perfil');
}

Obtener datos del perfil

Devuelve en formato JSON los datos del usuario autenticado en la sesión activa, incluyendo el nombre de su primer rol asignado. Este endpoint es consumido por el frontend para poblar el formulario de perfil tras cargar la vista.
MétodoRutaControlador
GET/buscar-perfilPerfilController@buscarPerfil
Ejemplo de petición:
GET /buscar-perfil
Ejemplo de respuesta exitosa:
{
  "success": true,
  "mensaje": "Datos del perfil obtenido exitosamente",
  "data": {
    "user": {
      "id": 1,
      "name": "Admin User",
      "email": "admin@example.com",
      "rol": "Administrator"
    }
  }
}
El campo rol se obtiene llamando a $user->getRoleNames() y tomando el primer elemento del resultado ($roles[0]). El controlador añade dinámicamente este campo al objeto usuario antes de devolverlo:
public function buscarPerfil()
{
    $user        = Auth::user();
    $roles       = $user->getRoleNames();
    $user['rol'] = $roles[0];

    $data = ['user' => $user];

    return response()->json([
        'success' => true,
        'mensaje' => 'Datos del perfil obtenido exitosamente',
        'data'    => $data
    ]);
}

Actualizar perfil

Persiste los cambios en los datos del perfil del usuario autenticado. La lógica de guardado está encapsulada en el método estático Usuario::Guardar($request) del modelo Usuario, manteniendo el controlador delgado.
MétodoRutaControlador
POST/actualizar-perfilPerfilController@actualizarPerfil
Ejemplo de petición:
POST /actualizar-perfil
Content-Type: application/x-www-form-urlencoded

name=Admin+User&email=admin%40example.com
Ejemplo de respuesta exitosa:
{
  "success": true,
  "mensaje": "Perfil guardado con exito."
}
Ejemplo de respuesta fallida:
{
  "success": false,
  "mensaje": "Hubo error intentando guardar el Perfil."
}
La operación se ejecuta dentro de una transacción de base de datos. Si Usuario::Guardar($request) retorna false, la transacción se revierte y se devuelve el mensaje de error correspondiente:
DB::beginTransaction();

$save = Usuario::Guardar($request);
DB::commit();

$mensaje = "Perfil guardado con exito.";
if (!$save) {
    $mensaje = "Hubo error intentando guardar el Perfil.";
    App::abort(500, 'Error');
}

return response()->json(['success' => true, 'mensaje' => $mensaje]);

Vista de cambio de contraseña

Carga la vista dedicada al cambio de contraseña. Esta ruta retorna la plantilla Blade que contiene el formulario específico para actualizar la contraseña; el formulario envía los datos al endpoint POST /actualiza-password.
MétodoRutaControladorVista retornada
GET/cambiar-contrasenaPerfilController@cambiarContrasenaperfiles.change-password
Ejemplo de petición:
GET /cambiar-contrasena
El controlador simplemente retorna la vista:
public function cambiarContrasena()
{
    return view('perfiles.change-password');
}

Cambiar contraseña

Permite al usuario autenticado actualizar su contraseña de acceso de forma segura. El endpoint valida los tres campos requeridos, comprueba que la contraseña actual sea correcta usando Hash::check, y almacena el nuevo hash generado con Hash::make.
MétodoRutaControlador
POST/actualiza-passwordPerfilController@actualizaPassword
contrasenaActual
string
required
Contraseña actual del usuario. Se verifica contra el hash almacenado en la base de datos mediante Hash::check. Longitud mínima: 8 caracteres.
newContrasena
string
required
Nueva contraseña deseada. Debe ser diferente de contrasenaActual (regla different:contrasenaActual) y tener una longitud mínima de 8 caracteres.
repetirContrasena
string
required
Confirmación de la nueva contraseña. Debe coincidir exactamente con newContrasena (regla same:newContrasena). Longitud mínima: 8 caracteres.
Ejemplo de petición:
POST /actualiza-password
Content-Type: application/x-www-form-urlencoded

contrasenaActual=MiPassword123&newContrasena=NuevoPass456&repetirContrasena=NuevoPass456
Ejemplo de respuesta exitosa:
{
  "data": [],
  "message": "<i class=\"cil-happy 3x\"></i><br>Tu contraseña fue actualizada.",
  "status": true
}
Ejemplo de respuesta fallida (contraseña actual incorrecta):
{
  "errors": [],
  "message": "<i class=\"cil-frown 3x\"></i><br> Contraseña ingresada es incorrecta.",
  "status": false
}
Ejemplo de respuesta fallida (errores de validación):
{
  "errors": {
    "newContrasena": ["The new contrasena and contrasena actual must be different."],
    "repetirContrasena": ["The repetir contrasena and new contrasena must match."]
  },
  "message": "Fallo al actualizar la contraseña.",
  "status": false
}
El fragmento central del controlador:
if (\Hash::check($request->contrasenaActual, Auth::user()->password)) {
    $user           = Usuario::find(Auth::user()->id);
    $user->password = Hash::make($request->newContrasena);

    if ($user->save()) {
        return response()->json([
            'data'    => [],
            'message' => '<i class="cil-happy 3x"></i><br>Tu contraseña fue actualizada.',
            'status'  => true
        ], 200);
    }
} else {
    return response()->json([
        'errors'  => [],
        'message' => '<i class="cil-frown 3x"></i><br> Contraseña ingresada es incorrecta.',
        'status'  => false
    ], 200);
}

Validación de contraseña

El endpoint POST /actualiza-password aplica las siguientes reglas de validación antes de procesar el cambio:
CampoReglaDescripción
contrasenaActualrequiredEl campo es obligatorio.
contrasenaActualstringDebe ser una cadena de texto.
contrasenaActualmin:8Mínimo 8 caracteres.
newContrasenarequiredEl campo es obligatorio.
newContrasenastringDebe ser una cadena de texto.
newContrasenamin:8Mínimo 8 caracteres.
newContrasenadifferent:contrasenaActualLa nueva contraseña debe ser distinta de la actual.
repetirContrasenarequired_with:newContrasenaObligatorio cuando newContrasena está presente.
repetirContrasenasame:newContrasenaDebe coincidir exactamente con newContrasena.
repetirContrasenastringDebe ser una cadena de texto.
repetirContrasenamin:8Mínimo 8 caracteres.
Si alguna regla falla, el endpoint retorna inmediatamente un JSON con status: false, el mensaje "Fallo al actualizar la contraseña." y el objeto errors con los mensajes de validación por campo — sin intentar verificar la contraseña actual ni escribir en la base de datos.
El cambio de contraseña valida explícitamente que la nueva contraseña sea diferente de la contraseña actual mediante la regla different:contrasenaActual. Esto impide que un usuario establezca la misma contraseña que ya tenía, garantizando que el cambio tenga efecto real sobre su acceso al sistema.
La autenticación del sistema es exclusivamente basada en sesión web (middleware auth de Laravel). No existe autenticación por token (API tokens, Bearer tokens, Sanctum o Passport) para los endpoints del perfil. Todas las peticiones a /ver-perfil, /buscar-perfil, /actualizar-perfil, /cambiar-contrasena y /actualiza-password deben originarse desde un navegador con una sesión activa y autenticada; de lo contrario, el middleware auth redirigirá al formulario de inicio de sesión.

Build docs developers (and LLMs) love