NutriScanController
Este controlador gestiona las operaciones CRUD para el módulo NutriScan, que permite generar y administrar análisis nutricionales basados en texto, usando inteligencia artificial y OCR. Las acciones están protegidas por autenticación JWT y controladas según el rol del usuario.
🔍 Ubicación
src/controller/nutriscan.controller.ts
🔒 Seguridad
Todas las rutas están protegidas mediante @Security("jwt"). El acceso a cada operación está determinado por el tipoUsuario o rol autenticado.
| Tipo de Usuario / Rol | Acciones Permitidas |
|---|---|
INDIVIDUAL | Crear análisis |
ADMIN | Ver, crear, actualizar y eliminar cualquier análisis |
DESARROLLADOR | Crear análisis de prueba y ver únicamente los suyos |
📦 Dependencias clave
NutriScanService: Contiene la lógica de negocio para crear, consultar, actualizar y eliminar análisis.NutriScanSchemaWithoutUserId: Esquema de validación (zod) para crear nuevos registros.NutriScanUpdateSchema: Esquema de validación para actualizar registros existentes.
📘 Endpoints
📝 POST /nutriscan
Crea un nuevo análisis nutricional.
Disponible para: INDIVIDUAL, ADMIN, DESARROLLADOR
Validaciones:
- Se valida el cuerpo usando
NutriScanSchemaWithoutUserId. - Si el rol es
DESARROLLADOR, se marca como análisis de prueba (isTest = true).
Respuestas:
201 Created: Registro creado con éxito.400 Bad Request: Datos inválidos.403 Forbidden: El usuario no tiene permiso para usar NutriScan.
📄 GET /nutriscan
Devuelve todos los análisis accesibles según el rol del usuario autenticado.
| Rol | Acceso |
|---|---|
ADMIN | Ver todos los registros (auditoría). |
DESARROLLADOR | Ver solo los registros de prueba creados por sí mismo. |
| Otros | ❌ Acceso denegado. |
Respuestas:
200 OK: Lista de registros.403 Forbidden: Acceso denegado.
👤 GET /nutriscan/usuario/{usuarioId}
Devuelve los análisis asociados a un usuario específico.
Disponible solo para: ADMIN
Parámetros:
usuarioId: ID del usuario del cual se quieren consultar los análisis.
Respuestas:
200 OK: Lista de análisis del usuario.403 Forbidden: Acceso denegado.
✏️ PUT /nutriscan/{id}
Actualiza parcialmente un análisis existente.
Disponible solo para: ADMIN
Parámetros:
id: ID del análisis a modificar.body: Cuerpo con los campos a actualizar (validado conNutriScanUpdateSchema).
Respuestas:
200 OK: Registro actualizado correctamente.400 Bad Request: Validación fallida o cuerpo inválido.403 Forbidden: Acceso denegado.
🗑️ DELETE /nutriscan/{id}
Elimina un análisis por su ID.
Disponible solo para: ADMIN
Parámetros:
id: ID del análisis a eliminar.
Respuestas:
200 OK: Eliminación exitosa.403 Forbidden: Acceso denegado.
🧪 Ejemplo de uso (POST)
// Crear análisis nutricional (tipo INDIVIDUAL)
fetch("/nutriscan", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
consulta: "Arroz integral",
esAlimento: true,
respuesta: {},
tipoAnalisis: "ocr-gpt-only"
})
});
📦 Resumen de métodos
| Método | Ruta | Descripción | Autorizado para |
|---|---|---|---|
POST | /nutriscan | Crear nuevo análisis | INDIVIDUAL, ADMIN, DEV |
GET | /nutriscan | Obtener análisis según el rol | ADMIN, DESARROLLADOR |
GET | /nutriscan/usuario/{id} | Consultar análisis de un usuario | ADMIN |
PUT | /nutriscan/{id} | Actualizar un análisis | ADMIN |
DELETE | /nutriscan/{id} | Eliminar un análisis | ADMIN |