Registros de Comidas
Endpoints para registrar y seguir comidas.
Modelos de Datos
Section titled “Modelos de Datos”Los siguientes modelos de Prisma pertenecen al schema nutrition:
MealLog
Section titled “MealLog”model MealLog { id String @id @default(cuid()) userProfileId String @map("user_profile_id") logDate DateTime @map("log_date") mealType MealType @map("meal_type")
notes String? moodBefore Int? @map("mood_before") moodAfter Int? @map("mood_after") hungerLevel Int? @map("hunger_level") photoUrl String? @map("photo_url")
userProfile UserProfile @relation(fields: [userProfileId], references: [id], onDelete: Cascade) foodEntries FoodEntry[]
createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at")
@@index([userProfileId, logDate]) @@map("meal_logs") @@schema("nutrition")}FoodEntry
Section titled “FoodEntry”model FoodEntry { id String @id @default(cuid()) mealLogId String @map("meal_log_id") foodId String @map("food_id")
quantity Float unit String @default("g")
calories Float protein Float carbs Float fat Float
mealLog MealLog @relation(fields: [mealLogId], references: [id], onDelete: Cascade) food Food @relation(fields: [foodId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at")
@@map("food_entries") @@schema("nutrition")}MealType (Enum)
Section titled “MealType (Enum)”enum MealType { BREAKFAST LUNCH DINNER SNACK PRE_WORKOUT POST_WORKOUT
@@schema("nutrition")}Endpoints
Section titled “Endpoints”Obtener Registros de Comidas
Section titled “Obtener Registros de Comidas”Obtener registros de comidas.
- URL:
/api/v1/nutrition/meal-logs - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene registros de comidas:
-
Filtros disponibles:
userProfileId: Filtrar por usuariomealType: Tipo de comidastartDate/endDate: Rango de fechas
-
Incluye:
- foodEntries con información del alimento
- userProfile (id, name)
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”date: Filtrar por fechamealType: Filtrar por tipo de comidapage: Número de páginalimit: Resultados por página
Ejemplo de Cliente Hono
Section titled “Ejemplo de Cliente Hono”import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.nutrition['meal-logs'].$get({ query: { date: '2023-10-27' }})Obtener Mis Registros de Comidas
Section titled “Obtener Mis Registros de Comidas”Obtener registros de comidas del usuario actual.
- URL:
/api/v1/nutrition/meal-logs/me - Método:
GET - Autenticación Requerida: Sí
Obtener Registro de Comida por ID
Section titled “Obtener Registro de Comida por ID”Obtener un registro de comida específico con entradas de alimentos.
- URL:
/api/v1/nutrition/meal-logs/:id - Método:
GET - Autenticación Requerida: Sí
Crear Registro de Comida
Section titled “Crear Registro de Comida”Registrar una comida.
- URL:
/api/v1/nutrition/meal-logs - Método:
POST - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint registra una comida:
-
Crea el MealLog con:
- userProfileId del usuario autenticado
- mealType, logDate
- notes opcionales
-
Las entradas de alimentos se añaden después con el endpoint de food entries
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "mealType": "BREAKFAST", "logDate": "2023-10-27T08:00:00Z", "notes": "Morning breakfast"}Actualizar Registro de Comida
Section titled “Actualizar Registro de Comida”Actualizar un registro de comida existente.
- URL:
/api/v1/nutrition/meal-logs/:id - Método:
PUT - Autenticación Requerida: Sí
Eliminar Registro de Comida
Section titled “Eliminar Registro de Comida”Eliminar un registro de comida.
- URL:
/api/v1/nutrition/meal-logs/:id - Método:
DELETE - Autenticación Requerida: Sí
Añadir Entrada de Alimento a Comida
Section titled “Añadir Entrada de Alimento a Comida”Añadir una entrada de alimento a un registro de comida.
- URL:
/api/v1/nutrition/meal-logs/:mealLogId/entries - Método:
POST - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint añade un alimento a una comida:
-
Verifica que el meal log y alimento existen
-
Calcula valores nutricionales:
- Multiplica valores del alimento por (cantidad/100)
- Calcula: calories, protein, carbs, fat
-
Crea FoodEntry con valores calculados
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "foodId": "food_id", "quantity": 150, "unit": "g"}Respuesta
Section titled “Respuesta”{ "data": { "id": "...", "quantity": 150, "calories": 247.5, "protein": 46.5, "carbs": 0, "fat": 5.4, "food": {...} }}Actualizar Entrada de Alimento
Section titled “Actualizar Entrada de Alimento”Actualizar una entrada de alimento en un registro de comida.
- URL:
/api/v1/nutrition/meal-logs/:mealLogId/entries/:entryId - Método:
PUT - Autenticación Requerida: Sí
Eliminar Entrada de Alimento
Section titled “Eliminar Entrada de Alimento”Eliminar una entrada de alimento de un registro de comida.
- URL:
/api/v1/nutrition/meal-logs/:mealLogId/entries/:entryId - Método:
DELETE - Autenticación Requerida: Sí
Obtener Resumen Diario
Section titled “Obtener Resumen Diario”Obtener resumen nutricional para un día específico.
- URL:
/api/v1/nutrition/meal-logs/daily - Método:
GET - Autenticación Requerida: Sí
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”date: Fecha a resumir (YYYY-MM-DD)
Respuesta
Section titled “Respuesta”{ "data": { "meals": [...], "totals": { "calories": 2150, "protein": 120, "carbs": 250, "fat": 70 } }}