Alimentos
Endpoints para gestionar la base de datos de alimentos.
Modelos de Datos
Section titled “Modelos de Datos”Los siguientes modelos de Prisma pertenecen al schema nutrition:
model Food { id String @id @default(cuid()) name String brand String? barcode String?
calories Float protein Float carbohydrates Float @map("carbs") fat Float fiber Float? sugar Float? sodium Float?
servingSize Float? @map("serving_size") servingUnit String? @map("serving_unit") category FoodCategory allergens String[]
isVerified Boolean @default(false) @map("is_verified") source String?
foodEntries FoodEntry[] planFoods PlanFood[]
createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at")
@@index([name]) @@index([barcode]) @@index([category]) @@map("foods") @@schema("nutrition")}FoodCategory (Enum)
Section titled “FoodCategory (Enum)”enum FoodCategory { VEGETABLES FRUITS GRAINS PROTEINS DAIRY FATS_OILS BEVERAGES SNACKS PREPARED_FOODS SUPPLEMENTS SPICES_CONDIMENTS NUTS_SEEDS LEGUMES SEAFOOD
@@schema("nutrition")}Endpoints
Section titled “Endpoints”Obtener Alimentos
Section titled “Obtener Alimentos”Obtener una lista de alimentos con filtros.
- URL:
/api/v1/nutrition/foods - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene alimentos de la base de datos:
-
Filtros disponibles:
search: Búsqueda en nombre y marca (case-insensitive)category: Categoría del alimentoisVerified: Solo alimentos verificadosbarcode: Búsqueda exacta por código de barras
-
Ordenamiento y paginación dinámicos
-
Campos por alimento:
- Información nutricional: calories, protein, carbohydrates, fat
- Tamaño de porción y unidad
- Marca y categoría
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”name: Filtrar por nombrecategory: Filtrar por categoríasearch: Buscar en nombre y marcaisVerified: Solo alimentos verificadospage: 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.foods.$get({ query: { name: 'Apple' }})Obtener Alimento por ID
Section titled “Obtener Alimento por ID”Obtener detalles de un alimento específico.
- URL:
/api/v1/nutrition/foods/:id - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene un alimento específico por su ID.
Obtener Alimento por Código de Barras
Section titled “Obtener Alimento por Código de Barras”Buscar alimento por código de barras.
- URL:
/api/v1/nutrition/foods/barcode/:barcode - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint busca un alimento por código de barras:
- Busca en la base de datos por código exacto
- Si no encuentra: Lanza error 404
TODO: Integrar con APIs externas (OpenFoodFacts, USDA) cuando el alimento no existe localmente
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.foods.barcode[':barcode'].$get({ param: { barcode: '123456789' }})Crear Alimento (Admin/Trainer)
Section titled “Crear Alimento (Admin/Trainer)”Crear un nuevo item de alimento.
- URL:
/api/v1/nutrition/foods - Método:
POST - Autenticación Requerida: Sí Admin Trainer
Descripción Interna
Section titled “Descripción Interna”Este endpoint crea un nuevo alimento:
- Verifica duplicados por barcode si se proporciona
- Crea el alimento con toda la información nutricional
- Retorna el alimento creado
Campos Nutricionales
Section titled “Campos Nutricionales”name: Nombre del alimento (requerido)calories: Calorías por porciónprotein: Proteínas en gramoscarbohydrates(carbs): Carbohidratos en gramosfat: Grasas en gramosservingSize: Tamaño de porciónunit: Unidad (g, ml, oz, etc.)barcode: Código de barras (opcional)brand: Marca (opcional)category: Categoría
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "name": "Chicken Breast", "calories": 165, "protein": 31, "carbs": 0, "fat": 3.6, "servingSize": 100, "unit": "g"}Errores Comunes
Section titled “Errores Comunes”400 Bad Request: Ya existe un alimento con este código de barras
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.foods.$post({ json: { name: 'Chicken Breast', calories: 165, protein: 31, carbs: 0, fat: 3.6, servingSize: 100, unit: 'g' }})Actualizar Alimento
Section titled “Actualizar Alimento”Actualizar un item de alimento existente.
- URL:
/api/v1/nutrition/foods/:id - Método:
PUT - Autenticación Requerida: Sí (Admin/Trainer)
Eliminar Alimento
Section titled “Eliminar Alimento”Eliminar un item de alimento.
- URL:
/api/v1/nutrition/foods/:id - Método:
DELETE - Autenticación Requerida: Sí (Admin/Trainer)