# Lista de Endpoints
`api.php` actúa como **único punto de entrada** (Front Controller) entre el frontend y el backend.
Todas las peticiones deben ser **POST** con el parámetro `action` indicando la operación a realizar.

---

## Convenciones

| Campo          | Descripción                                                            |
|----------------|------------------------------------------------------------------------|
| **Método**     | Siempre `POST`                                                         |
| **action**     | Identifica el endpoint. Obligatorio en todas las peticiones            |
| **data**       | Objeto con los datos de la entidad. Solo en endpoints que lo requieran |
| **Solo Admin** | El endpoint verifica que `$_SESSION['rol'] !== 0`                      |
| **Respuesta**  | Siempre JSON con al menos `{ ok: bool }`                               |

---

### SECCION ADMINISTRADOR
> Requieren sesión activa con rol administrador (`rol !== 0`).

| NOMBRE               | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                                            |
|----------------------|--------|------------|------|------------------------|-------------|--------------------------------------------------------|
| load_users           | POST   | SI         | NO   | NINGUNO                | USERS       | Obtiene todos los usuarios del sistema                 |
| update_user          | POST   | SI         | SI   | NINGUNO                | USERS       | Actualiza los datos generales de un usuario, no passwd |
| update_user_password | POST   | SI         | SI   | NINGUNO                | USERS       | Actualiza la contraseña de un usuario                  |
| delete_user          | POST   | SI         | SI   | HARD = TRUE/FALSE      | USERS       | Elimina a un usuario de forma lógica o física          |
| create:user          | POST   | SI         | SI   | NINGUNO                | USERS       | Crea un nuevo usuario en bd                            |||||||||

---

### SECCION DE CONTROL DE SESIÓN
| NOMBRE        | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                                                     |
|---------------|--------|------------|------|------------------------|-------------|-----------------------------------------------------------------|
| login         | POST   | NO         | SI   | NINGUNO                | USERS       | Verifica credenciales de acceso e inicia session si es correcto |
| logout        | POST   | NO         | NO   | NINGUNO                | NINGUNO     | Destruye la sesion de usuario                                   |
| check_session | POST   | NO         | NO   | NINGUNO                | NINGUNO     | Verifica el estado de la sesion                                 |

---


### SECCION TIPOS
| NOMBRE       | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                         |
|--------------|--------|------------|------|------------------------|----------|-------------------------------------|
| load_tipos   | POST   | NO         | NO   | NINGUNO                | TIPO     | Obtiene todos los tipos             |
| load_tiposec | POSt   | NO         | NO   | NINGUNO                | TIPO     | Obtiene todos los tipos secundarios |

---


### SECCIÓN SECUNDARIO
| NOMBRE               | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                                                                                           |
|----------------------|--------|------------|------|------------------------|-------------|-------------------------------------------------------------------------------------------------------|
| load_secundario      | POST   | NO         | NO   | NINGUNO                | MEDIDAS     | Obtiene los secundarios dado tiposec, primario, rango de fecha y sts                                  |
| load_secundario_NPS  | POST   | NO         | NO   | NINGUNO                | MEDIDAS     | Obtiene los secundarios dado tiposec y rango de fechas                                                |
| load_secundario_NPSJ | POST   | NO         | NO   | NINGUNO                | MEDIDAS     | Obtiene los secundarios dado tiposec y rango de fechas con nombres de primario y sts en vez de los id |

---


### SECCIÓN CAMPAÑA
| NOMBRE            | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                           |
|-------------------|--------|------------|------|------------------------|-------------|---------------------------------------|
| lastFechaCampania | POST   | NO         | NO   | NINGUNO                | CAMPANIA    | Obtiene la fecha de la ultima campaña |

---

### SECCIÓN LAYOUTS
> Requieren sesión activa. No requieren rol administrador.

| NOMBRE            | ACCIÓN | SOLO ADMIN | DATA | PARAMETROS ADICIONALES | CONTROLADOR | DESCRIPCIÓN                                   |
|-------------------|--------|------------|------|------------------------|-------------|-----------------------------------------------|
| list_layouts_user | POST   | NO         | NO   | NINGUNO                | LAYOUTS     | Obtiene todos los layouts de un usuario       |
| delete_layout     | POST   | NO         | SI   | HARD/SOFT              | LAYOUTS     | Borra un layout por completo, logico o fisico |
| save_layout       | POST   | NO         | SI   | NINGUNO                | LAYOUTS     | Guarda un layout y todas sus dependencias     |
| update_layout     | POST   | NO         | SI   | NINGUNO                | LAYOUTS     | Actualiza un layout                           |

---

## Default

Cualquier `action` no reconocida devuelve:

```json
{ "ok": false, "error": "Acción «nombre» no reconocida.", "status": 400 }
```

Y cualquier excepción no capturada devuelve HTTP 500 con:

```json
{ "ok": false, "error": "Mensaje de la excepción", "archivo": "fichero.php", "linea": 42 }
```

> NOTA: Los codigos de status se han diseñado usando la conveción de status de HTTP [CodigoHTTP](https://www.semrush.com/blog/http-status-codes/?g_network=g&g_keyword=&g_acctid=951-454-0426&g_keywordid=dsa-2185834088336&g_adtype=search&g_adid=676270860694&g_campaignid=18347529021&g_campaign=ES_SRCH_DSA_Blog_EN&g_adgroupid=153587537679&kw=&cmp=ES_SRCH_DSA_Blog_EN&label=dsa_pagefeed&Network=g&Device=c&utm_content=676270860694&kwid=dsa-2185834088336&cmpid=18347529021&agpid=153587537679&BU=Core&extid=279865934450&adpos=&matchtype=&gad_source=1&gad_campaignid=18347529021&gclid=Cj0KCQjw2MbPBhCSARIsAP3jP9xH-7kZcphj0ovtkuHqSvNvq6ozixT14U1l99YRWdBTioEg2pWCVDgaAp3WEALw_wcB)