# API del Comedor Esta API permite acceder y gestionar los datos de menús del comedor de forma programática mediante JSON. ## Autenticación La API utiliza el mismo sistema de autenticación que el resto de la aplicación. Todas las solicitudes deben estar autenticadas a través de la sesión PHP. ## Permisos - **Lectura (GET)**: Requiere permiso `entreaulas:docente` - **Escritura (POST)**: Requiere permisos `sysadmin:access` (además de `entreaulas:docente`) ## Endpoints ### 1. Obtener tipos de menú **GET** `/aulatek/api/comedor.php?action=get_menu_types&aulario={aulario_id}` Devuelve todos los tipos de menú disponibles para un aulario. **Parámetros:** - `aulario` (requerido): ID del aulario **Ejemplo de respuesta:** ```json { "success": true, "menu_types": [ { "id": "basal", "label": "Menú basal", "color": "#0d6efd" }, { "id": "vegetariano", "label": "Menú vegetariano", "color": "#198754" }, { "id": "alergias", "label": "Menú alergias", "color": "#dc3545" } ] } ``` --- ### 2. Obtener menú de un día **GET** `/entreauals/api/comedor.php?action=get_menu&aulario={aulario_id}&date={date}&menu={menu_type_id}` Obtiene el menú de un día específico y tipo de menú. **Parámetros:** - `aulario` (requerido): ID del aulario - `date` (opcional): Fecha en formato YYYY-MM-DD (por defecto: hoy) - `menu` (opcional): ID del tipo de menú (por defecto: primer tipo disponible) **Ejemplo de respuesta:** ```json { "success": true, "date": "2026-02-18", "menu_type": "basal", "menu_types": [/* lista de tipos de menú */], "menu": { "plates": { "primero": { "name": "Lentejas", "pictogram": "" }, "segundo": { "name": "Pollo asado", "pictogram": "basal_segundo_pict.jpg" }, "postre": { "name": "Manzana", "pictogram": "" } } } } ``` --- ### 3. Guardar menú **POST** `/aulatek/api/comedor.php?action=save_menu&aulario={aulario_id}` Guarda o actualiza un menú para un día específico. **Parámetros (JSON):** ```json { "date": "2026-02-18", "menu_type": "basal", "plates": { "primero": { "name": "Lentejas" }, "segundo": { "name": "Pollo asado" }, "postre": { "name": "Manzana" } } } ``` **Ejemplo de uso con curl:** ```bash curl -X POST "http://localhost/aulatek/api/comedor.php?action=save_menu&aulario=aulario_id" \ -H "Content-Type: application/json" \ -d '{ "date": "2026-02-18", "menu_type": "basal", "plates": { "primero": {"name": "Sopa"}, "segundo": {"name": "Pescado"}, "postre": {"name": "Yogur"} } }' ``` --- ### 4. Añadir nuevo tipo de menú **POST** `/aulatek/api/comedor.php?action=add_menu_type&aulario={aulario_id}` Crea un nuevo tipo de menú. **Parámetros (JSON):** ```json { "id": "celiaco", "label": "Menú celíaco", "color": "#ff9800" } ``` **Ejemplo de uso con curl:** ```bash curl -X POST "http://localhost/aulatek/api/comedor.php?action=add_menu_type&aulario=aulario_id" \ -H "Content-Type: application/json" \ -d '{ "id": "celiaco", "label": "Menú celíaco", "color": "#ff9800" }' ``` --- ### 5. Renombrar tipo de menú **POST** `/aulatek/api/comedor.php?action=rename_menu_type&aulario={aulario_id}` Cambia el nombre o color de un tipo de menú existente. **Parámetros (JSON):** ```json { "id": "basal", "label": "Menú estándar", "color": "#0d6efd" } ``` --- ### 6. Eliminar tipo de menú **POST** `/aulatek/api/comedor.php?action=delete_menu_type&aulario={aulario_id}` Elimina un tipo de menú. **Parámetros (JSON o form-data):** ```json { "id": "celiaco" } ``` --- ## Códigos de error | Código | Descripción | |--------|-------------| | `FORBIDDEN` (403) | Sin permisos suficientes | | `INVALID_SESSION` (400) | Centro no encontrado en la sesión | | `MISSING_PARAM` (400) | Parámetro requerido no proporcionado | | `INVALID_FORMAT` (400) | Formato inválido (ej: fecha) | | `INVALID_MENU_TYPE` (400) | Tipo de menú inválido | | `DUPLICATE` (400) | El tipo de menú ya existe | | `NOT_FOUND` (404) | Recurso no encontrado | | `INVALID_ACTION` (400) | Acción no reconocida | --- ## Ejemplos en JavaScript ### Obtener menú actual ```javascript async function obtenerMenu(aularioId) { const response = await fetch( `/aulatek/api/comedor.php?action=get_menu&aulario=${aularioId}` ); const data = await response.json(); return data.menu; } ``` ### Guardar menú ```javascript async function guardarMenu(aularioId, fecha, tipoMenu, platos) { const response = await fetch( `/aulatek/api/comedor.php?action=save_menu&aulario=${aularioId}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ date: fecha, menu_type: tipoMenu, plates: platos }) } ); return await response.json(); } ``` ### Obtener tipos de menú ```javascript async function obtenerTiposMenu(aularioId) { const response = await fetch( `/aulatek/api/comedor.php?action=get_menu_types&aulario=${aularioId}` ); const data = await response.json(); return data.menu_types; } ``` --- ## Notas - La API devuelve JSON con charset UTF-8 - Las fechas se usan en formato `YYYY-MM-DD` - Los colores se especifican en formato hexadecimal (ej: `#0d6efd`) - Las imágenes de pictogramas no se pueden subir directamente a través de la API JSON - Para compartir datos de comedor entre aularios, usar la configuración de `shared_comedor_from` en el archivo del aulario