Improve the production frontend 3

This commit is contained in:
Urtzi Alfaro
2025-09-21 11:57:03 +02:00
parent 13ca3e90b4
commit 29065f5337
6 changed files with 13 additions and 590 deletions

View File

@@ -1,142 +0,0 @@
#!/bin/bash
# Add real recipes using actual inventory data
TENANT_ID="c464fb3e-7af2-46e6-9e43-85318f34199a"
USER_ID="550e8400-e29b-41d4-a716-446655440000" # User UUID format
API_BASE="http://localhost:8009"
echo "🧁 Adding real recipes with actual inventory data..."
echo "📍 Tenant ID: $TENANT_ID"
echo "🌐 API Base: $API_BASE"
echo "=" | tr -d '\n' && printf '%.0s=' {1..50} && echo
# Real finished product IDs from inventory
CROISSANT_ID="c9a049b7-d1ae-4bf5-99cc-ed2c46f0a509"
NAPOLITANA_ID="72c1020f-64be-4b42-8857-e774908204d9"
PALMERA_ID="9e888a05-9dda-488b-a06c-0c60a4479e67"
PAN_TOSTADO_ID="368fba0e-8ec5-4048-a2f1-79b63f9e11cf"
# Real ingredient IDs from inventory
HARINA_TRIGO_ID="1e1d496f-c041-4f42-82a9-2ae7837c9231" # Harina de Trigo
LEVADURA_ID="de2f0852-75f5-4b18-8f0e-7c707f79a9f9" # Levadura Fresca
MANTEQUILLA_ID="89e6224a-a055-4148-a2f1-86a5091becec" # Mantequilla
# Recipe 1: Croissant de Mantequilla
echo "Creating Recipe 1: Croissant de Mantequilla..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-H "x-user-id: $USER_ID" \
-d '{
"name": "Croissant de Mantequilla",
"recipe_code": "CRO001",
"finished_product_id": "'$CROISSANT_ID'",
"description": "Croissant clásico francés con mantequilla, hojaldrado perfecto y textura crujiente",
"category": "pastry",
"difficulty_level": 3,
"yield_quantity": 12,
"yield_unit": "units",
"prep_time_minutes": 240,
"cook_time_minutes": 18,
"total_time_minutes": 258,
"is_signature_item": true,
"target_margin_percentage": 65.0,
"ingredients": [
{"ingredient_id": "'$HARINA_TRIGO_ID'", "quantity": 500, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$MANTEQUILLA_ID'", "quantity": 300, "unit": "g", "is_optional": false, "ingredient_order": 2},
{"ingredient_id": "'$LEVADURA_ID'", "quantity": 12, "unit": "g", "is_optional": false, "ingredient_order": 3}
]
}'
echo -e "\n\n"
# Recipe 2: Napolitana de Chocolate
echo "Creating Recipe 2: Napolitana de Chocolate..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-H "x-user-id: $USER_ID" \
-d '{
"name": "Napolitana de Chocolate",
"recipe_code": "NAP001",
"finished_product_id": "'$NAPOLITANA_ID'",
"description": "Hojaldre relleno de chocolate, dulce y crujiente, perfecto para merienda",
"category": "pastry",
"difficulty_level": 2,
"yield_quantity": 8,
"yield_unit": "units",
"prep_time_minutes": 45,
"cook_time_minutes": 20,
"total_time_minutes": 65,
"is_signature_item": false,
"target_margin_percentage": 70.0,
"ingredients": [
{"ingredient_id": "'$HARINA_TRIGO_ID'", "quantity": 300, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$MANTEQUILLA_ID'", "quantity": 200, "unit": "g", "is_optional": false, "ingredient_order": 2}
]
}'
echo -e "\n\n"
# Recipe 3: Palmera de Azúcar
echo "Creating Recipe 3: Palmera de Azúcar..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-H "x-user-id: $USER_ID" \
-d '{
"name": "Palmera de Azúcar",
"recipe_code": "PAL001",
"finished_product_id": "'$PALMERA_ID'",
"description": "Palmera de hojaldre con azúcar caramelizado, dulce y crujiente",
"category": "pastry",
"difficulty_level": 2,
"yield_quantity": 10,
"yield_unit": "units",
"prep_time_minutes": 30,
"cook_time_minutes": 15,
"total_time_minutes": 45,
"is_signature_item": false,
"target_margin_percentage": 75.0,
"ingredients": [
{"ingredient_id": "'$HARINA_TRIGO_ID'", "quantity": 400, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$MANTEQUILLA_ID'", "quantity": 150, "unit": "g", "is_optional": false, "ingredient_order": 2}
]
}'
echo -e "\n\n"
# Recipe 4: Pan Tostado Artesanal
echo "Creating Recipe 4: Pan Tostado Artesanal..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-H "x-user-id: $USER_ID" \
-d '{
"name": "Pan Tostado Artesanal",
"recipe_code": "PAN001",
"finished_product_id": "'$PAN_TOSTADO_ID'",
"description": "Pan artesanal con corteza crujiente y miga tierna, perfecto para tostadas",
"category": "bread",
"difficulty_level": 2,
"yield_quantity": 2,
"yield_unit": "units",
"prep_time_minutes": 180,
"cook_time_minutes": 35,
"total_time_minutes": 215,
"is_signature_item": true,
"target_margin_percentage": 60.0,
"ingredients": [
{"ingredient_id": "'$HARINA_TRIGO_ID'", "quantity": 600, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$LEVADURA_ID'", "quantity": 15, "unit": "g", "is_optional": false, "ingredient_order": 2}
]
}'
echo -e "\n\n🎉 Real recipes creation completed!"
echo "✅ Created recipes for existing products:"
echo " • Croissant de Mantequilla"
echo " • Napolitana de Chocolate"
echo " • Palmera de Azúcar"
echo " • Pan Tostado Artesanal"
echo ""
echo "🔗 All recipes are linked to real products and ingredients from inventory!"

View File

@@ -1,145 +0,0 @@
#!/bin/bash
# Add sample recipes using the API
TENANT_ID="c464fb3e-7af2-46e6-9e43-85318f34199a"
API_BASE="http://localhost:8009"
echo "🧁 Adding sample recipes via API..."
echo "📍 Tenant ID: $TENANT_ID"
echo "🌐 API Base: $API_BASE"
echo "=" | tr -d '\n' && printf '%.0s=' {1..50} && echo
# Sample finished product IDs (these should exist in your system)
PRODUCT_ID_1="550e8400-e29b-41d4-a716-446655440001"
PRODUCT_ID_2="550e8400-e29b-41d4-a716-446655440002"
PRODUCT_ID_3="550e8400-e29b-41d4-a716-446655440003"
PRODUCT_ID_4="550e8400-e29b-41d4-a716-446655440004"
# Sample ingredient IDs (these should exist in your system)
ING_ID_1="660e8400-e29b-41d4-a716-446655440001" # Harina integral
ING_ID_2="660e8400-e29b-41d4-a716-446655440002" # Agua
ING_ID_3="660e8400-e29b-41d4-a716-446655440003" # Levadura
ING_ID_4="660e8400-e29b-41d4-a716-446655440004" # Sal
ING_ID_5="660e8400-e29b-41d4-a716-446655440005" # Harina de fuerza
ING_ID_6="660e8400-e29b-41d4-a716-446655440006" # Mantequilla
ING_ID_7="660e8400-e29b-41d4-a716-446655440007" # Leche
ING_ID_8="660e8400-e29b-41d4-a716-446655440008" # Azúcar
ING_ID_9="660e8400-e29b-41d4-a716-446655440009" # Manzanas
ING_ID_10="660e8400-e29b-41d4-a716-446655440010" # Huevos
ING_ID_11="660e8400-e29b-41d4-a716-446655440011" # Limón
# Recipe 1: Pan de Molde Integral
echo "Creating Recipe 1: Pan de Molde Integral..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-d '{
"name": "Pan de Molde Integral",
"recipe_code": "PAN001",
"finished_product_id": "'$PRODUCT_ID_1'",
"description": "Pan integral artesanal con semillas, perfecto para desayunos saludables.",
"category": "bread",
"difficulty_level": 2,
"yield_quantity": 1,
"yield_unit": "units",
"prep_time_minutes": 120,
"cook_time_minutes": 35,
"total_time_minutes": 155,
"is_signature_item": false,
"target_margin_percentage": 40.0,
"ingredients": [
{"ingredient_id": "'$ING_ID_1'", "quantity": 500, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$ING_ID_2'", "quantity": 300, "unit": "ml", "is_optional": false, "ingredient_order": 2},
{"ingredient_id": "'$ING_ID_3'", "quantity": 10, "unit": "g", "is_optional": false, "ingredient_order": 3},
{"ingredient_id": "'$ING_ID_4'", "quantity": 8, "unit": "g", "is_optional": false, "ingredient_order": 4}
]
}'
echo -e "\n\n"
# Recipe 2: Croissants de Mantequilla
echo "Creating Recipe 2: Croissants de Mantequilla..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-d '{
"name": "Croissants de Mantequilla",
"recipe_code": "CRO001",
"finished_product_id": "'$PRODUCT_ID_2'",
"description": "Croissants franceses tradicionales con laminado de mantequilla.",
"category": "pastry",
"difficulty_level": 3,
"yield_quantity": 12,
"yield_unit": "units",
"prep_time_minutes": 480,
"cook_time_minutes": 20,
"total_time_minutes": 500,
"is_signature_item": true,
"target_margin_percentage": 52.8,
"ingredients": [
{"ingredient_id": "'$ING_ID_5'", "quantity": 500, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$ING_ID_6'", "quantity": 250, "unit": "g", "is_optional": false, "ingredient_order": 2},
{"ingredient_id": "'$ING_ID_7'", "quantity": 150, "unit": "ml", "is_optional": false, "ingredient_order": 3},
{"ingredient_id": "'$ING_ID_8'", "quantity": 50, "unit": "g", "is_optional": false, "ingredient_order": 4}
]
}'
echo -e "\n\n"
# Recipe 3: Tarta de Manzana
echo "Creating Recipe 3: Tarta de Manzana..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-d '{
"name": "Tarta de Manzana",
"recipe_code": "TAR001",
"finished_product_id": "'$PRODUCT_ID_3'",
"description": "Tarta casera de manzana con canela y masa quebrada.",
"category": "cake",
"difficulty_level": 1,
"yield_quantity": 8,
"yield_unit": "portions",
"prep_time_minutes": 45,
"cook_time_minutes": 40,
"total_time_minutes": 85,
"is_signature_item": false,
"target_margin_percentage": 65.0,
"ingredients": [
{"ingredient_id": "'$ING_ID_9'", "quantity": 1000, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$ING_ID_1'", "quantity": 250, "unit": "g", "is_optional": false, "ingredient_order": 2},
{"ingredient_id": "'$ING_ID_6'", "quantity": 125, "unit": "g", "is_optional": false, "ingredient_order": 3},
{"ingredient_id": "'$ING_ID_8'", "quantity": 100, "unit": "g", "is_optional": false, "ingredient_order": 4}
]
}'
echo -e "\n\n"
# Recipe 4: Magdalenas de Limón
echo "Creating Recipe 4: Magdalenas de Limón..."
curl -X POST "$API_BASE/api/v1/recipes/" \
-H "Content-Type: application/json" \
-H "x-tenant-id: $TENANT_ID" \
-d '{
"name": "Magdalenas de Limón",
"recipe_code": "MAG001",
"finished_product_id": "'$PRODUCT_ID_4'",
"description": "Magdalenas suaves y esponjosas con ralladura de limón.",
"category": "pastry",
"difficulty_level": 1,
"yield_quantity": 12,
"yield_unit": "units",
"prep_time_minutes": 20,
"cook_time_minutes": 25,
"total_time_minutes": 45,
"is_signature_item": false,
"target_margin_percentage": 57.8,
"ingredients": [
{"ingredient_id": "'$ING_ID_1'", "quantity": 200, "unit": "g", "is_optional": false, "ingredient_order": 1},
{"ingredient_id": "'$ING_ID_10'", "quantity": 3, "unit": "units", "is_optional": false, "ingredient_order": 2},
{"ingredient_id": "'$ING_ID_8'", "quantity": 150, "unit": "g", "is_optional": false, "ingredient_order": 3},
{"ingredient_id": "'$ING_ID_11'", "quantity": 2, "unit": "units", "is_optional": false, "ingredient_order": 4}
]
}'
echo -e "\n\n🎉 Sample recipes creation completed!"

View File

@@ -145,6 +145,12 @@
"cashier": "Cajero",
"assistant": "Asistente"
},
"global_roles": {
"user": "Usuario",
"admin": "Administrador",
"manager": "Gestor",
"super_admin": "Super Administrador"
},
"permissions": {
"read": "Lectura",
"write": "Escritura",

View File

@@ -7,6 +7,7 @@ import { useCurrentTenant } from '../../../../stores';
import { useToast } from '../../../../hooks/ui/useToast';
import { useAuthProfile, useUpdateProfile, useChangePassword } from '../../../../api/hooks/auth';
import { subscriptionService, type UsageSummary, type AvailablePlans } from '../../../../api';
import { useTranslation } from 'react-i18next';
interface ProfileFormData {
first_name: string;
@@ -78,6 +79,7 @@ interface NotificationPreferences {
const ProfilePage: React.FC = () => {
const user = useAuthUser();
const { t } = useTranslation('auth');
const { addToast } = useToast();
const { data: profile, isLoading: profileLoading, error: profileError } = useAuthProfile();
@@ -596,6 +598,11 @@ const ProfilePage: React.FC = () => {
{profileData.first_name} {profileData.last_name}
</h1>
<p className="text-text-secondary">{profileData.email}</p>
{user?.role && (
<p className="text-sm text-text-tertiary mt-1">
{t(`global_roles.${user.role}`)}
</p>
)}
<div className="flex items-center gap-2 mt-2">
<div className="w-2 h-2 bg-green-500 rounded-full"></div>
<span className="text-sm text-text-tertiary">En línea</span>

View File

@@ -1,302 +0,0 @@
-- Insert real recipes using actual inventory data
-- Tenant ID: c464fb3e-7af2-46e6-9e43-85318f34199a
-- User email for created_by: fsdfsdfs@sdfsdf.com
-- Real finished product IDs from inventory:
-- Croissant: c9a049b7-d1ae-4bf5-99cc-ed2c46f0a509
-- Napolitana: 72c1020f-64be-4b42-8857-e774908204d9
-- Palmera: 9e888a05-9dda-488b-a06c-0c60a4479e67
-- Pan Tostado: 368fba0e-8ec5-4048-a2f1-79b63f9e11cf
-- Real ingredient IDs from inventory:
-- Harina de Trigo: 1e1d496f-c041-4f42-82a9-2ae7837c9231
-- Levadura Fresca: de2f0852-75f5-4b18-8f0e-7c707f79a9f9
-- Mantequilla: 89e6224a-a055-4148-a2f1-86a5091becec
BEGIN;
-- Recipe 1: Croissant de Mantequilla
INSERT INTO recipes (
id, tenant_id, name, recipe_code, version, finished_product_id,
description, category, difficulty_level, yield_quantity, yield_unit,
prep_time_minutes, cook_time_minutes, total_time_minutes,
estimated_cost_per_unit, target_margin_percentage, suggested_selling_price,
batch_size_multiplier, status, is_signature_item, is_seasonal,
created_at, updated_at, created_by
) VALUES (
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
'Croissant de Mantequilla',
'CRO001',
'1.0',
'c9a049b7-d1ae-4bf5-99cc-ed2c46f0a509',
'Croissant clásico francés con mantequilla, hojaldrado perfecto y textura crujiente',
'pastry',
3,
12,
'UNITS',
240,
18,
258,
1.25,
65.0,
3.38,
1.0,
'ACTIVE',
true,
false,
NOW(),
NOW(),
NULL
);
-- Get the recipe ID for ingredients
INSERT INTO recipe_ingredients (
id, tenant_id, recipe_id, ingredient_id, quantity, unit,
is_optional, ingredient_order
) VALUES
-- Harina de Trigo
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'CRO001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'1e1d496f-c041-4f42-82a9-2ae7837c9231',
0.5,
'KILOGRAMS',
false,
1
),
-- Mantequilla
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'CRO001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'89e6224a-a055-4148-a2f1-86a5091becec',
0.3,
'KILOGRAMS',
false,
2
),
-- Levadura Fresca
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'CRO001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'de2f0852-75f5-4b18-8f0e-7c707f79a9f9',
0.012,
'KILOGRAMS',
false,
3
);
-- Recipe 2: Napolitana de Chocolate
INSERT INTO recipes (
id, tenant_id, name, recipe_code, version, finished_product_id,
description, category, difficulty_level, yield_quantity, yield_unit,
prep_time_minutes, cook_time_minutes, total_time_minutes,
estimated_cost_per_unit, target_margin_percentage, suggested_selling_price,
batch_size_multiplier, status, is_signature_item, is_seasonal,
created_at, updated_at, created_by
) VALUES (
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
'Napolitana de Chocolate',
'NAP001',
'1.0',
'72c1020f-64be-4b42-8857-e774908204d9',
'Hojaldre relleno de chocolate, dulce y crujiente, perfecto para merienda',
'pastry',
2,
8,
'UNITS',
45,
20,
65,
2.00,
70.0,
6.67,
1.0,
'ACTIVE',
false,
false,
NOW(),
NOW(),
NULL
);
-- Ingredients for Napolitana
INSERT INTO recipe_ingredients (
id, tenant_id, recipe_id, ingredient_id, quantity, unit,
is_optional, ingredient_order
) VALUES
-- Harina de Trigo
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'NAP001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'1e1d496f-c041-4f42-82a9-2ae7837c9231',
0.3,
'KILOGRAMS',
false,
1
),
-- Mantequilla
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'NAP001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'89e6224a-a055-4148-a2f1-86a5091becec',
0.2,
'KILOGRAMS',
false,
2
);
-- Recipe 3: Palmera de Azúcar
INSERT INTO recipes (
id, tenant_id, name, recipe_code, version, finished_product_id,
description, category, difficulty_level, yield_quantity, yield_unit,
prep_time_minutes, cook_time_minutes, total_time_minutes,
estimated_cost_per_unit, target_margin_percentage, suggested_selling_price,
batch_size_multiplier, status, is_signature_item, is_seasonal,
created_at, updated_at, created_by
) VALUES (
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
'Palmera de Azúcar',
'PAL001',
'1.0',
'9e888a05-9dda-488b-a06c-0c60a4479e67',
'Palmera de hojaldre con azúcar caramelizado, dulce y crujiente',
'pastry',
2,
10,
'UNITS',
30,
15,
45,
1.80,
75.0,
7.20,
1.0,
'ACTIVE',
false,
false,
NOW(),
NOW(),
NULL
);
-- Ingredients for Palmera
INSERT INTO recipe_ingredients (
id, tenant_id, recipe_id, ingredient_id, quantity, unit,
is_optional, ingredient_order
) VALUES
-- Harina de Trigo
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'PAL001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'1e1d496f-c041-4f42-82a9-2ae7837c9231',
0.4,
'KILOGRAMS',
false,
1
),
-- Mantequilla
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'PAL001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'89e6224a-a055-4148-a2f1-86a5091becec',
0.15,
'KILOGRAMS',
false,
2
);
-- Recipe 4: Pan Tostado Artesanal
INSERT INTO recipes (
id, tenant_id, name, recipe_code, version, finished_product_id,
description, category, difficulty_level, yield_quantity, yield_unit,
prep_time_minutes, cook_time_minutes, total_time_minutes,
estimated_cost_per_unit, target_margin_percentage, suggested_selling_price,
batch_size_multiplier, status, is_signature_item, is_seasonal,
created_at, updated_at, created_by
) VALUES (
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
'Pan Tostado Artesanal',
'PAN001',
'1.0',
'368fba0e-8ec5-4048-a2f1-79b63f9e11cf',
'Pan artesanal con corteza crujiente y miga tierna, perfecto para tostadas',
'bread',
2,
2,
'UNITS',
180,
35,
215,
3.50,
60.0,
9.33,
1.0,
'ACTIVE',
true,
false,
NOW(),
NOW(),
NULL
);
-- Ingredients for Pan Tostado
INSERT INTO recipe_ingredients (
id, tenant_id, recipe_id, ingredient_id, quantity, unit,
is_optional, ingredient_order
) VALUES
-- Harina de Trigo
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'PAN001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'1e1d496f-c041-4f42-82a9-2ae7837c9231',
0.6,
'KILOGRAMS',
false,
1
),
-- Levadura Fresca
(
gen_random_uuid(),
'c464fb3e-7af2-46e6-9e43-85318f34199a',
(SELECT id FROM recipes WHERE recipe_code = 'PAN001' AND tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'),
'de2f0852-75f5-4b18-8f0e-7c707f79a9f9',
0.015,
'KILOGRAMS',
false,
2
);
COMMIT;
-- Verify the data was inserted
SELECT
r.name,
r.recipe_code,
r.category,
r.difficulty_level,
r.yield_quantity,
r.yield_unit,
r.total_time_minutes,
r.estimated_cost_per_unit,
r.suggested_selling_price,
r.is_signature_item,
COUNT(ri.id) as ingredient_count
FROM recipes r
LEFT JOIN recipe_ingredients ri ON r.id = ri.recipe_id
WHERE r.tenant_id = 'c464fb3e-7af2-46e6-9e43-85318f34199a'
GROUP BY r.id, r.name, r.recipe_code, r.category, r.difficulty_level,
r.yield_quantity, r.yield_unit, r.total_time_minutes,
r.estimated_cost_per_unit, r.suggested_selling_price, r.is_signature_item
ORDER BY r.created_at DESC;

View File

@@ -235,7 +235,6 @@ async def get_nearby_tenants_enhanced(
return tenants
@router.put("/tenants/{tenant_id}", response_model=TenantResponse)
@track_endpoint_metrics("tenant_update")
async def update_tenant_enhanced(
update_data: TenantUpdate,
tenant_id: UUID = Path(..., description="Tenant ID"),