Tutorial: Onboarding Manual de un Nuevo Tenant en Gastro
Este tutorial describe el flujo manual vigente para crear un nuevo restaurante en Gastro usando el contrato actual del backend y validar que la carta pública quede accesible.
Prerrequisitos
- Backend Gastro corriendo en
http://localhost:8005 - PostgreSQL y Redis disponibles
curlo Postman- Frontends locales opcionales:
public-menuenhttp://localhost:3000admin-panelenhttp://localhost:5174/app
Variables sugeridas:
Paso 1: Crear el founder y el tenant con POST /signup
El alta self-service crea en una sola transacción:
- founder
- tenant
- categoría inicial placeholder
Además devuelve access_token y public_menu_url.
curl -X POST "$BASE/signup" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: onboarding-bistro-del-valle-001" \
-d '{
"founder_full_name": "María García",
"email": "propietario@bistro-test.com",
"password": "securePassword123!",
"tenant_name": "Bistró del Valle",
"tenant_slug": "bistro-del-valle",
"sector": "traditional",
"brand_color": "#1a1a1a",
"accent_color": "#d4a853",
"hero_style": "minimal"
}'
Respuesta esperada:
{
"founder_id": "uuid",
"tenant_id": "uuid",
"tenant_slug": "bistro-del-valle",
"tenant_name": "Bistró del Valle",
"access_token": "eyJhbGciOi...",
"token_type": "bearer",
"public_menu_url": "/api/v1/public/menu/bistro-del-valle"
}
Guarda el token:
Paso 2: Verificar la sesión actual
El backend permite bootstrap de sesión con GET /auth/me.
Esto confirma que el JWT quedó asociado al tenant_id correcto y que la sesión tiene permisos válidos.
Paso 3: Consultar el perfil del tenant
Úsalo para confirmar:
slugtheme_configplan_typeonboarding_status
Paso 4: Crear una categoría real
curl -X POST "$BASE/categories" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Entradas",
"description": "Platos para abrir el apetito.",
"sort_order": 0
}'
Respuesta esperada:
idnameproducts: []
Guarda el id como CATEGORY_ID.
Paso 5: Crear el primer producto
export CATEGORY_ID="pega_aqui_el_uuid_de_la_categoria"
curl -X POST "$BASE/products" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"category_id\": \"$CATEGORY_ID\",
\"name\": \"Empanadas de Pipían\",
\"description\": \"3 empanadas tradicionales acompañadas de ají de maní.\",
\"price\": 12500,
\"tags\": [\"popular\"],
\"is_available\": true,
\"is_featured\": true,
\"sort_order\": 0
}"
Paso 6: Validar la carta pública
Primero valida el endpoint backend:
Luego valida el frontend público si está corriendo:
Si todo está bien:
- el tenant existe
- la categoría aparece
- el producto aparece en la carta pública
Paso 7: Validar el admin-panel
Si el admin-panel está corriendo en local:
- abre
http://localhost:5174/app/login - usa:
slug:bistro-del-vallepassword:securePassword123!
Desde ahí ya puedes:
- editar el negocio
- cambiar apariencia
- gestionar categorías/productos
- activar fidelización vía Foveo si aplica
Notas importantes
POST /signuprequiereIdempotency-Key.- El signup ya devuelve
access_token, pero hoy no existe handoff automático al admin-panel. - La categoría inicial placeholder puede existir tras signup; el flujo real de negocio suele reemplazarla con categorías del restaurante.
- Para imágenes, usa primero
POST /media/uploady luego persisteimage_url/image_keyen categoría o producto.