# Perfil del usuario autenticado

## Objetivo

Este endpoint permite que la SPA consulte y actualice el perfil del usuario autenticado sin exponer cambios de rol, estado, permisos ni farmacia. La contraseña sí puede cambiarse desde aquí usando la contraseña actual.

Usa la misma sesión Sanctum stateful basada en cookies que el resto de la API.

## Endpoints

| Método | Endpoint | Uso |
|---|---|---|
| GET | `/api/v1/profile` | Obtener el perfil editable actual |
| PATCH | `/api/v1/profile` | Actualizar datos personales del usuario autenticado |

## Campos devueltos

`GET /api/v1/profile` responde en `data.user` con:

- `id`
- `first_name`
- `last_name`
- `full_name`
- `identification_number`
- `whatsapp`
- `phone`
- `username`
- `email`
- `city`
- `nickname`
- `status`
- `roles`
- `permissions`
- `pharmacy`
- `created_at`
- `updated_at`

`pharmacy` sigue el mismo formato de `/api/v1/auth/me`.

## Payload de actualización

Solo se permiten campos personales:

```json
{
  "first_name": "Albert",
  "last_name": "Mata",
  "identification_number": "00112345678",
  "whatsapp": "8095551234",
  "phone": "8095559999",
  "username": "albertmata",
  "email": "albert@example.com",
  "city": "Santo Domingo",
  "nickname": "Beto"
}
```

Todos son opcionales en `PATCH`, pero cada campo enviado debe ser válido.

## Cambio de contraseña

Para cambiar la contraseña, enviar además:

```json
{
  "current_password": "Password123!",
  "password": "NuevoPassword123!",
  "password_confirmation": "NuevoPassword123!"
}
```

Reglas:

- `current_password` es obligatorio cuando se envía `password`.
- `password` requiere mínimo 8 caracteres.
- `password_confirmation` debe coincidir con `password`.
- La respuesta sigue devolviendo `data.user`; nunca devuelve la contraseña.

## Restricciones importantes

- No enviar `status`, `role`, `roles`, `permissions`, `pharmacy_id` ni `uuid`.
- `username`, `email` e `identification_number` deben seguir siendo únicos entre usuarios y solicitudes de registro pendientes.
- La API normaliza `identification_number`, `username`, `email`, `whatsapp` y `phone` igual que en registro y administración de usuarios.

## Uso recomendado en React

- Usar `GET /api/v1/auth/me` para bootstrap de sesión y capacidades.
- Usar `GET /api/v1/profile` cuando la pantalla de perfil necesite todos los campos editables.
- Tras guardar, reemplazar el estado local con `data.user` de la respuesta de `PATCH /api/v1/profile`.

## Errores esperados

- `401 UNAUTHENTICATED` si no hay sesión activa.
- `422 VALIDATION_ERROR` si el payload no cumple reglas de validación o intenta enviar campos prohibidos.
- `422 USER_DATA_ALREADY_EXISTS` si `username`, `email` o `identification_number` ya existen.
- `422 VALIDATION_ERROR` también aplica si `current_password` no coincide o si `password_confirmation` no confirma la nueva contraseña.
