Update requirements and insfra versions
This commit is contained in:
@@ -49,7 +49,7 @@ services:
|
|||||||
# ================================================================
|
# ================================================================
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:7.4-alpine
|
||||||
container_name: bakery-redis
|
container_name: bakery-redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# ONLY use environment substitution from .env
|
# ONLY use environment substitution from .env
|
||||||
@@ -73,7 +73,7 @@ services:
|
|||||||
retries: 3
|
retries: 3
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
image: rabbitmq:4.0-management-alpine
|
image: rabbitmq:4.1-management-alpine
|
||||||
container_name: bakery-rabbitmq
|
container_name: bakery-rabbitmq
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# ONLY use environment substitution from .env
|
# ONLY use environment substitution from .env
|
||||||
@@ -101,7 +101,7 @@ services:
|
|||||||
# ================================================================
|
# ================================================================
|
||||||
|
|
||||||
auth-db:
|
auth-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-auth-db
|
container_name: bakery-auth-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# ONLY reference .env variables
|
# ONLY reference .env variables
|
||||||
@@ -123,7 +123,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
training-db:
|
training-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-training-db
|
container_name: bakery-training-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -144,7 +144,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
forecasting-db:
|
forecasting-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-forecasting-db
|
container_name: bakery-forecasting-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -165,7 +165,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
sales-db:
|
sales-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-sales-db
|
container_name: bakery-sales-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -186,7 +186,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
external-db:
|
external-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-external-db
|
container_name: bakery-external-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -207,7 +207,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
tenant-db:
|
tenant-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-tenant-db
|
container_name: bakery-tenant-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -228,7 +228,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
notification-db:
|
notification-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-notification-db
|
container_name: bakery-notification-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -249,7 +249,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
inventory-db:
|
inventory-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-inventory-db
|
container_name: bakery-inventory-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -270,7 +270,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
recipes-db:
|
recipes-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-recipes-db
|
container_name: bakery-recipes-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -291,7 +291,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
suppliers-db:
|
suppliers-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-suppliers-db
|
container_name: bakery-suppliers-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -312,7 +312,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
pos-db:
|
pos-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-pos-db
|
container_name: bakery-pos-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -333,7 +333,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
orders-db:
|
orders-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-orders-db
|
container_name: bakery-orders-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -354,7 +354,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
production-db:
|
production-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-production-db
|
container_name: bakery-production-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -375,7 +375,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
alert-processor-db:
|
alert-processor-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: bakery-alert-processor-db
|
container_name: bakery-alert-processor-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -401,7 +401,7 @@ services:
|
|||||||
# ================================================================
|
# ================================================================
|
||||||
|
|
||||||
nominatim-db:
|
nominatim-db:
|
||||||
image: postgis/postgis:15-3.3 # Use PostGIS enabled PostgreSQL image
|
image: postgis/postgis:17-3.5
|
||||||
container_name: bakery-nominatim-db
|
container_name: bakery-nominatim-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -409,14 +409,14 @@ services:
|
|||||||
- POSTGRES_USER=${NOMINATIM_DB_USER}
|
- POSTGRES_USER=${NOMINATIM_DB_USER}
|
||||||
- POSTGRES_PASSWORD=${NOMINATIM_DB_PASSWORD}
|
- POSTGRES_PASSWORD=${NOMINATIM_DB_PASSWORD}
|
||||||
- PGDATA=/var/lib/postgresql/data/pgdata
|
- PGDATA=/var/lib/postgresql/data/pgdata
|
||||||
- POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256" # Recommended for PostGIS
|
- POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256"
|
||||||
volumes:
|
volumes:
|
||||||
- nominatim_db_data:/var/lib/postgresql/data
|
- nominatim_db_data:/var/lib/postgresql/data
|
||||||
profiles:
|
profiles:
|
||||||
- development
|
- development
|
||||||
networks:
|
networks:
|
||||||
bakery-network:
|
bakery-network:
|
||||||
ipv4_address: 172.20.0.30 # Assign a static IP for Nominatim to find it
|
ipv4_address: 172.20.0.30
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U ${NOMINATIM_DB_USER} -d ${NOMINATIM_DB_NAME}"]
|
test: ["CMD-SHELL", "pg_isready -U ${NOMINATIM_DB_USER} -d ${NOMINATIM_DB_NAME}"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
@@ -1023,7 +1023,7 @@ services:
|
|||||||
# ================================================================
|
# ================================================================
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:v2.45.0
|
image: prom/prometheus:v3.0.1
|
||||||
container_name: bakery-prometheus
|
container_name: bakery-prometheus
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command:
|
command:
|
||||||
@@ -1041,7 +1041,7 @@ services:
|
|||||||
ipv4_address: 172.20.0.200
|
ipv4_address: 172.20.0.200
|
||||||
|
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:10.0.0
|
image: grafana/grafana:12.3.0
|
||||||
container_name: bakery-grafana
|
container_name: bakery-grafana
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
@@ -1101,7 +1101,7 @@ services:
|
|||||||
# ================================================================
|
# ================================================================
|
||||||
|
|
||||||
pgadmin:
|
pgadmin:
|
||||||
image: dpage/pgadmin4:7.4
|
image: dpage/pgadmin4:8.14
|
||||||
container_name: bakery-pgadmin
|
container_name: bakery-pgadmin
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export const PilotBanner: React.FC<PilotBannerProps> = ({
|
|||||||
<div className="flex items-center gap-2 bg-white/60 dark:bg-gray-800/60 px-3 py-1.5 rounded-lg border border-amber-300 dark:border-amber-700">
|
<div className="flex items-center gap-2 bg-white/60 dark:bg-gray-800/60 px-3 py-1.5 rounded-lg border border-amber-300 dark:border-amber-700">
|
||||||
<Check className="w-4 h-4 text-green-600 dark:text-green-400" />
|
<Check className="w-4 h-4 text-green-600 dark:text-green-400" />
|
||||||
<span className="text-sm font-medium text-gray-800 dark:text-gray-200">
|
<span className="text-sm font-medium text-gray-800 dark:text-gray-200">
|
||||||
40% descuento de por vida
|
20% descuento de por vida
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"badge_sustainability": "Food Waste Reduction",
|
"badge_sustainability": "Food Waste Reduction",
|
||||||
"title_line1": "Increase Profits,",
|
"title_line1": "Increase Profits,",
|
||||||
"title_line2": "Reduce Waste",
|
"title_line2": "Reduce Waste",
|
||||||
"subtitle": "AI platform for bakeries that want to produce exactly what they'll sell. Reduce food waste, improve margins, and save time on planning. 100% Spanish, your data is yours.",
|
"subtitle": "AI platform for bakeries that want to produce exactly what they'll sell. Reduce food waste, improve margins, and save time on planning. Your data is 100% yours.",
|
||||||
"pilot_banner": {
|
"pilot_banner": {
|
||||||
"title": "Pilot Launch!",
|
"title": "Pilot Launch!",
|
||||||
"offer": "3 MONTHS FREE",
|
"offer": "3 MONTHS FREE",
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
"benefits": {
|
"benefits": {
|
||||||
"founders_beta": {
|
"founders_beta": {
|
||||||
"title": "Founders Beta",
|
"title": "Founders Beta",
|
||||||
"description": "Lifetime access with 40% discount"
|
"description": "Lifetime access with 20% discount"
|
||||||
},
|
},
|
||||||
"influence_product": {
|
"influence_product": {
|
||||||
"title": "Influence the Product",
|
"title": "Influence the Product",
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
"what_you_get": {
|
"what_you_get": {
|
||||||
"title": "What You Get",
|
"title": "What You Get",
|
||||||
"free_trial": "<strong>3 completely free months</strong> to test all features",
|
"free_trial": "<strong>3 completely free months</strong> to test all features",
|
||||||
"lifetime_discount": "<strong>40% lifetime discount</strong> if you continue after the pilot",
|
"lifetime_discount": "<strong>20% lifetime discount</strong> if you continue after the pilot",
|
||||||
"founder_support": "<strong>Direct support from founding team</strong> - we respond in hours, not days",
|
"founder_support": "<strong>Direct support from founding team</strong> - we respond in hours, not days",
|
||||||
"priority_features": "<strong>Your ideas implemented first</strong> - we build what you really need",
|
"priority_features": "<strong>Your ideas implemented first</strong> - we build what you really need",
|
||||||
"cancel_anytime": "<strong>Cancel anytime</strong> without explanations or penalties"
|
"cancel_anytime": "<strong>Cancel anytime</strong> without explanations or penalties"
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
"why_now": {
|
"why_now": {
|
||||||
"title": "Why act now?",
|
"title": "Why act now?",
|
||||||
"lifetime_discount": {
|
"lifetime_discount": {
|
||||||
"title": "40% lifetime discount",
|
"title": "20% lifetime discount",
|
||||||
"subtitle": "First 20 only"
|
"subtitle": "First 20 only"
|
||||||
},
|
},
|
||||||
"influence": {
|
"influence": {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"badge_sustainability": "Reducción de Desperdicio Alimentario",
|
"badge_sustainability": "Reducción de Desperdicio Alimentario",
|
||||||
"title_line1": "Aumenta Ganancias,",
|
"title_line1": "Aumenta Ganancias,",
|
||||||
"title_line2": "Reduce Desperdicios",
|
"title_line2": "Reduce Desperdicios",
|
||||||
"subtitle": "Plataforma de IA para panaderías que quieren producir exactamente lo que van a vender. Reduce desperdicio alimentario, mejora márgenes y ahorra tiempo en planificación. 100% española, tus datos son tuyos.",
|
"subtitle": "Plataforma de IA para panaderías que quieren producir exactamente lo que van a vender. Reduce desperdicio alimentario, mejora márgenes y ahorra tiempo en planificación. Tus datos son 100% tuyos.",
|
||||||
"pilot_banner": {
|
"pilot_banner": {
|
||||||
"title": "¡Lanzamiento Piloto!",
|
"title": "¡Lanzamiento Piloto!",
|
||||||
"offer": "3 MESES GRATIS",
|
"offer": "3 MESES GRATIS",
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
"benefits": {
|
"benefits": {
|
||||||
"founders_beta": {
|
"founders_beta": {
|
||||||
"title": "Founders Beta",
|
"title": "Founders Beta",
|
||||||
"description": "Acceso de por vida con 40% descuento"
|
"description": "Acceso de por vida con 20% descuento"
|
||||||
},
|
},
|
||||||
"influence_product": {
|
"influence_product": {
|
||||||
"title": "Influye el Producto",
|
"title": "Influye el Producto",
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
"subtitle": "Sistema de alta tecnología que utiliza algoritmos de IA avanzados para optimizar tu producción, reducir residuos alimentarios y mantener tus datos 100% seguros y bajo tu control.",
|
"subtitle": "Sistema de alta tecnología que utiliza algoritmos de IA avanzados para optimizar tu producción, reducir residuos alimentarios y mantener tus datos 100% seguros y bajo tu control.",
|
||||||
"ai_prediction": {
|
"ai_prediction": {
|
||||||
"title": "IA Avanzada de Predicción",
|
"title": "IA Avanzada de Predicción",
|
||||||
"description": "Algoritmos de machine learning de última generación analizan patrones históricos, clima, eventos y tendencias para predecir demanda con precisión quirúrgica.",
|
"description": "Algoritmos de Inteligencia Artificial de última generación analizan patrones históricos, clima, eventos y tendencias para predecir demanda con precisión quirúrgica.",
|
||||||
"features": {
|
"features": {
|
||||||
"accuracy": "Precisión del 92% en predicciones",
|
"accuracy": "Precisión del 92% en predicciones",
|
||||||
"learning": "Aprendizaje continuo y adaptativo",
|
"learning": "Aprendizaje continuo y adaptativo",
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
"what_you_get": {
|
"what_you_get": {
|
||||||
"title": "Lo Que Obtienes",
|
"title": "Lo Que Obtienes",
|
||||||
"free_trial": "<strong>3 meses completamente gratis</strong> para probar todas las funcionalidades",
|
"free_trial": "<strong>3 meses completamente gratis</strong> para probar todas las funcionalidades",
|
||||||
"lifetime_discount": "<strong>40% de descuento de por vida</strong> si decides continuar después del piloto",
|
"lifetime_discount": "<strong>20% de descuento de por vida</strong> si decides continuar después del piloto",
|
||||||
"founder_support": "<strong>Soporte directo del equipo fundador</strong> - respondemos en horas, no días",
|
"founder_support": "<strong>Soporte directo del equipo fundador</strong> - respondemos en horas, no días",
|
||||||
"priority_features": "<strong>Tus ideas se implementan primero</strong> - construimos lo que realmente necesitas",
|
"priority_features": "<strong>Tus ideas se implementan primero</strong> - construimos lo que realmente necesitas",
|
||||||
"cancel_anytime": "<strong>Cancelas cuando quieras</strong> sin explicaciones ni penalizaciones"
|
"cancel_anytime": "<strong>Cancelas cuando quieras</strong> sin explicaciones ni penalizaciones"
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
},
|
},
|
||||||
"team": {
|
"team": {
|
||||||
"title": "Equipo Experto",
|
"title": "Equipo Experto",
|
||||||
"description": "Fundadores con experiencia en IA + hostelería. Conocemos el sector de dentro."
|
"description": "Fundadores con experiencia en proyectos de alto valor tecnológico + proyectos internacionales"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
"why_now": {
|
"why_now": {
|
||||||
"title": "¿Por qué actuar ahora?",
|
"title": "¿Por qué actuar ahora?",
|
||||||
"lifetime_discount": {
|
"lifetime_discount": {
|
||||||
"title": "40% descuento de por vida",
|
"title": "20% descuento de por vida",
|
||||||
"subtitle": "Solo primeros 20"
|
"subtitle": "Solo primeros 20"
|
||||||
},
|
},
|
||||||
"influence": {
|
"influence": {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"badge_sustainability": "Elikagai Hondakinen Murrizketa",
|
"badge_sustainability": "Elikagai Hondakinen Murrizketa",
|
||||||
"title_line1": "Handitu Irabaziak,",
|
"title_line1": "Handitu Irabaziak,",
|
||||||
"title_line2": "Murriztu Hondakinak",
|
"title_line2": "Murriztu Hondakinak",
|
||||||
"subtitle": "AA plataforma okindegiek saldu behar duten zehatz-mehatz ekoizteko. Murriztu elikagai hondakinak, hobetu marjinak eta aurreztu denbora plangintzan. 100% espainiarra, zure datuak zureak dira.",
|
"subtitle": "AA plataforma okindegiek saldu behar duten zehatz-mehatz ekoizteko. Murriztu elikagai hondakinak, hobetu marjinak eta aurreztu denbora plangintzan. Zure datuak 100% zureak dira.",
|
||||||
"pilot_banner": {
|
"pilot_banner": {
|
||||||
"title": "Pilotu Abiapena!",
|
"title": "Pilotu Abiapena!",
|
||||||
"offer": "3 HILABETE DOAN",
|
"offer": "3 HILABETE DOAN",
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
"benefits": {
|
"benefits": {
|
||||||
"founders_beta": {
|
"founders_beta": {
|
||||||
"title": "Sortzaileen Beta",
|
"title": "Sortzaileen Beta",
|
||||||
"description": "Bizitza osoko sarbidea %40 deskontuarekin"
|
"description": "Bizitza osoko sarbidea %20 deskontuarekin"
|
||||||
},
|
},
|
||||||
"influence_product": {
|
"influence_product": {
|
||||||
"title": "Eragin Produktuan",
|
"title": "Eragin Produktuan",
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
"what_you_get": {
|
"what_you_get": {
|
||||||
"title": "Zer Lortzen Duzu",
|
"title": "Zer Lortzen Duzu",
|
||||||
"free_trial": "<strong>3 hilabete guztiz doan</strong> funtzionalitate guztiak probatzeko",
|
"free_trial": "<strong>3 hilabete guztiz doan</strong> funtzionalitate guztiak probatzeko",
|
||||||
"lifetime_discount": "<strong>%40ko bizitza osoko deskontua</strong> pilotuaren ondoren jarraitzea erabakitzen baduzu",
|
"lifetime_discount": "<strong%20ko bizitza osoko deskontua</strong> pilotuaren ondoren jarraitzea erabakitzen baduzu",
|
||||||
"founder_support": "<strong>Sortzaile taldearen laguntza zuzena</strong> - orduetan erantzuten dugu, ez egunetan",
|
"founder_support": "<strong>Sortzaile taldearen laguntza zuzena</strong> - orduetan erantzuten dugu, ez egunetan",
|
||||||
"priority_features": "<strong>Zure ideiak lehenik gauzatzen dira</strong> - benetan behar duzuna eraikitzen dugu",
|
"priority_features": "<strong>Zure ideiak lehenik gauzatzen dira</strong> - benetan behar duzuna eraikitzen dugu",
|
||||||
"cancel_anytime": "<strong>Edozein unetan ezeztatu</strong> azalpenik edo zigorrekin"
|
"cancel_anytime": "<strong>Edozein unetan ezeztatu</strong> azalpenik edo zigorrekin"
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
"why_now": {
|
"why_now": {
|
||||||
"title": "Zergatik jardun orain?",
|
"title": "Zergatik jardun orain?",
|
||||||
"lifetime_discount": {
|
"lifetime_discount": {
|
||||||
"title": "%40 bizitza osoko deskontua",
|
"title": "%20 bizitza osoko deskontua",
|
||||||
"subtitle": "Lehenengo 20entzat bakarrik"
|
"subtitle": "Lehenengo 20entzat bakarrik"
|
||||||
},
|
},
|
||||||
"influence": {
|
"influence": {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
},
|
},
|
||||||
"rainy_day": {
|
"rainy_day": {
|
||||||
"condition": "Euri Eguna",
|
"condition": "Euri Eguna",
|
||||||
"impact": "%40ko igoera produktu beroetan",
|
"impact": "%20ko igoera produktu beroetan",
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"Zopa eta saltsa gehiago",
|
"Zopa eta saltsa gehiago",
|
||||||
"Txokolate beroak",
|
"Txokolate beroak",
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ const AboutPage: React.FC = () => {
|
|||||||
</h2>
|
</h2>
|
||||||
<p className="text-xl text-white/90 mb-8 leading-relaxed">
|
<p className="text-xl text-white/90 mb-8 leading-relaxed">
|
||||||
Estamos buscando 20 panaderías pioneras para nuestro programa piloto.
|
Estamos buscando 20 panaderías pioneras para nuestro programa piloto.
|
||||||
3 meses gratis, 40% descuento de por vida, y la oportunidad de moldear el producto.
|
3 meses gratis, 20% descuento de por vida, y la oportunidad de moldear el producto.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const BlogPage: React.FC = () => {
|
|||||||
content: `
|
content: `
|
||||||
# Cómo Reducir el Desperdicio Alimentario en tu Panadería
|
# Cómo Reducir el Desperdicio Alimentario en tu Panadería
|
||||||
|
|
||||||
El desperdicio alimentario es uno de los mayores desafíos para las panaderías artesanales. Cada día, miles de euros en producto terminan en la basura porque no se vendieron. Pero no tiene que ser así.
|
El desperdicio alimentario es uno de los mayores desafíos para las panaderías. Cada día, miles de euros en producto terminan en la basura porque no se vendieron. Pero no tiene que ser así.
|
||||||
|
|
||||||
## El Problema Real
|
## El Problema Real
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ El desperdicio alimentario no solo afecta tu rentabilidad, también el medioambi
|
|||||||
id: '2',
|
id: '2',
|
||||||
slug: 'ia-predecir-demanda-panaderia',
|
slug: 'ia-predecir-demanda-panaderia',
|
||||||
title: 'Cómo la IA Predice la Demanda en Panaderías con 92% de Precisión',
|
title: 'Cómo la IA Predice la Demanda en Panaderías con 92% de Precisión',
|
||||||
excerpt: 'La inteligencia artificial ha revolucionado la predicción de demanda. Descubre cómo funcionan los algoritmos de ML aplicados a panaderías artesanales.',
|
excerpt: 'La inteligencia artificial ha revolucionado la predicción de demanda. Descubre cómo funcionan los algoritmos de ML aplicados a panaderías',
|
||||||
content: `
|
content: `
|
||||||
# Cómo la IA Predice la Demanda en Panaderías
|
# Cómo la IA Predice la Demanda en Panaderías
|
||||||
|
|
||||||
@@ -733,7 +733,7 @@ El RGPD no es opcional. Pero tampoco es complicado si usas las herramientas corr
|
|||||||
¿Listo para Optimizar tu Panadería?
|
¿Listo para Optimizar tu Panadería?
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-xl text-white/90 mb-8">
|
<p className="text-xl text-white/90 mb-8">
|
||||||
Únete al programa piloto y obtén 3 meses gratis + 40% descuento de por vida
|
Únete al programa piloto y obtén 3 meses gratis + 20% descuento de por vida
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
to="/register"
|
to="/register"
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ const FeedbackPage: React.FC = () => {
|
|||||||
<span className="block text-[var(--color-primary)]">Panadería IA</span>
|
<span className="block text-[var(--color-primary)]">Panadería IA</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xl text-[var(--text-secondary)] leading-relaxed mb-8">
|
<p className="text-xl text-[var(--text-secondary)] leading-relaxed mb-8">
|
||||||
Tu feedback es fundamental para construir el mejor producto para panaderías artesanales
|
Tu feedback es fundamental para construir el mejor producto para panaderías
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ const HelpCenterPage: React.FC = () => {
|
|||||||
{
|
{
|
||||||
category: 'general',
|
category: 'general',
|
||||||
question: '¿Qué es Panadería IA y cómo funciona?',
|
question: '¿Qué es Panadería IA y cómo funciona?',
|
||||||
answer: 'Panadería IA es una plataforma de gestión inteligente para panaderías artesanales. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas.',
|
answer: 'Panadería IA es una plataforma de gestión inteligente para panaderías. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: 'general',
|
category: 'general',
|
||||||
@@ -105,7 +105,7 @@ const HelpCenterPage: React.FC = () => {
|
|||||||
{
|
{
|
||||||
category: 'pricing',
|
category: 'pricing',
|
||||||
question: '¿Cuánto cuesta el programa piloto?',
|
question: '¿Cuánto cuesta el programa piloto?',
|
||||||
answer: 'El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 40% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras. Las primeras 20 panaderías obtienen este beneficio.',
|
answer: 'El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras. Las primeras 20 panaderías obtienen este beneficio.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: 'pricing',
|
category: 'pricing',
|
||||||
@@ -115,7 +115,7 @@ const HelpCenterPage: React.FC = () => {
|
|||||||
{
|
{
|
||||||
category: 'pricing',
|
category: 'pricing',
|
||||||
question: '¿Qué pasa después de los 3 meses gratis?',
|
question: '¿Qué pasa después de los 3 meses gratis?',
|
||||||
answer: 'Tienes 3 opciones: 1) Continuar con el plan Basic (€49/mes con tu descuento del 40%), 2) Actualizar a un plan superior, 3) Cancelar sin penalización. Te avisaremos 7 días antes de que termine tu periodo gratuito.',
|
answer: 'Tienes 3 opciones: 1) Continuar con el plan Basic (€49/mes con tu descuento del 20%), 2) Actualizar a un plan superior, 3) Cancelar sin penalización. Te avisaremos 7 días antes de que termine tu periodo gratuito.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: 'technical',
|
category: 'technical',
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ const LandingPage: React.FC = () => {
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p className="mt-6 max-w-3xl mx-auto text-lg text-[var(--text-secondary)] sm:text-xl">
|
<p className="mt-6 max-w-3xl mx-auto text-lg text-[var(--text-secondary)] sm:text-xl">
|
||||||
{t('landing:hero.subtitle', 'Plataforma de IA diseñada para panaderías artesanales que quieren producir exactamente lo que van a vender. Reduce desperdicio alimentario, mejora márgenes y ahorra tiempo en planificación. 100% española, tus datos son tuyos.')}
|
{t('landing:hero.subtitle', 'Plataforma de IA diseñada para panaderías que quieren producir exactamente lo que van a vender. Reduce desperdicio alimentario, mejora márgenes y ahorra tiempo en planificación. 100% española, tus datos son tuyos.')}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Pilot Launch Banner */}
|
{/* Pilot Launch Banner */}
|
||||||
@@ -202,7 +202,7 @@ const LandingPage: React.FC = () => {
|
|||||||
<Award className="w-6 h-6 text-green-600 dark:text-green-400" />
|
<Award className="w-6 h-6 text-green-600 dark:text-green-400" />
|
||||||
</div>
|
</div>
|
||||||
<div className="text-lg font-bold text-[var(--text-primary)]">Founders Beta</div>
|
<div className="text-lg font-bold text-[var(--text-primary)]">Founders Beta</div>
|
||||||
<div className="text-sm text-[var(--text-secondary)] mt-2">Acceso de por vida con 40% descuento</div>
|
<div className="text-sm text-[var(--text-secondary)] mt-2">Acceso de por vida con 20% descuento</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="text-center p-6 bg-white dark:bg-gray-800 rounded-xl shadow-sm">
|
<div className="text-center p-6 bg-white dark:bg-gray-800 rounded-xl shadow-sm">
|
||||||
@@ -353,7 +353,7 @@ const LandingPage: React.FC = () => {
|
|||||||
<div className="mt-6">
|
<div className="mt-6">
|
||||||
<h3 className="text-xl font-bold text-[var(--text-primary)]">IA Avanzada de Predicción</h3>
|
<h3 className="text-xl font-bold text-[var(--text-primary)]">IA Avanzada de Predicción</h3>
|
||||||
<p className="mt-4 text-[var(--text-secondary)]">
|
<p className="mt-4 text-[var(--text-secondary)]">
|
||||||
Algoritmos de machine learning de última generación analizan patrones históricos, clima, eventos y tendencias para predecir demanda con precisión quirúrgica.
|
Algoritmos de Inteligencia Artificial de última generación analizan patrones históricos, clima, eventos y tendencias para predecir demanda con precisión quirúrgica.
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-6 space-y-3">
|
<div className="mt-6 space-y-3">
|
||||||
<div className="flex items-center text-sm">
|
<div className="flex items-center text-sm">
|
||||||
@@ -550,7 +550,7 @@ const LandingPage: React.FC = () => {
|
|||||||
<div className="text-center mb-16">
|
<div className="text-center mb-16">
|
||||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)]">
|
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)]">
|
||||||
El Problema Que Resolvemos
|
El Problema Que Resolvemos
|
||||||
<span className="block text-[var(--color-primary)]">Para Panaderías Artesanales</span>
|
<span className="block text-[var(--color-primary)]">Para Panaderías</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="mt-6 text-lg text-[var(--text-secondary)] max-w-3xl mx-auto">
|
<p className="mt-6 text-lg text-[var(--text-secondary)] max-w-3xl mx-auto">
|
||||||
Sabemos lo frustrante que es tirar pan al final del día, o quedarte sin producto cuando llegan clientes.
|
Sabemos lo frustrante que es tirar pan al final del día, o quedarte sin producto cuando llegan clientes.
|
||||||
@@ -687,7 +687,7 @@ const LandingPage: React.FC = () => {
|
|||||||
Sin Riesgo. Sin Ataduras.
|
Sin Riesgo. Sin Ataduras.
|
||||||
</h2>
|
</h2>
|
||||||
<p className="mt-4 max-w-2xl mx-auto text-lg text-[var(--text-secondary)]">
|
<p className="mt-4 max-w-2xl mx-auto text-lg text-[var(--text-secondary)]">
|
||||||
Somos transparentes: esto es un piloto. Estamos construyendo la mejor herramienta para panaderías artesanales, y necesitamos tu ayuda.
|
Somos transparentes: esto es un piloto. Estamos construyendo la mejor herramienta para panaderías, y necesitamos tu ayuda.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -707,7 +707,7 @@ const LandingPage: React.FC = () => {
|
|||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<Check className="w-5 h-5 text-green-600 dark:text-green-400 mt-1 flex-shrink-0" />
|
<Check className="w-5 h-5 text-green-600 dark:text-green-400 mt-1 flex-shrink-0" />
|
||||||
<span className="text-[var(--text-secondary)]"><strong>40% de descuento de por vida</strong> si decides continuar después del piloto</span>
|
<span className="text-[var(--text-secondary)]"><strong>20% de descuento de por vida</strong> si decides continuar después del piloto</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<Check className="w-5 h-5 text-green-600 dark:text-green-400 mt-1 flex-shrink-0" />
|
<Check className="w-5 h-5 text-green-600 dark:text-green-400 mt-1 flex-shrink-0" />
|
||||||
@@ -797,7 +797,7 @@ const LandingPage: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
<h4 className="font-semibold text-[var(--text-primary)] mb-2">Equipo Experto</h4>
|
<h4 className="font-semibold text-[var(--text-primary)] mb-2">Equipo Experto</h4>
|
||||||
<p className="text-sm text-[var(--text-secondary)]">
|
<p className="text-sm text-[var(--text-secondary)]">
|
||||||
Fundadores con experiencia en IA + hostelería. Conocemos el sector de dentro.
|
Fundadores con experiencia en proyectos de alto valor tecnológico + proyectos internacionales.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -896,30 +896,35 @@ const LandingPage: React.FC = () => {
|
|||||||
<span className="block text-white/90 mt-2">En Probar Esta Tecnología</span>
|
<span className="block text-white/90 mt-2">En Probar Esta Tecnología</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="mt-6 text-lg text-white/90 max-w-2xl mx-auto">
|
<p className="mt-6 text-lg text-white/90 max-w-2xl mx-auto">
|
||||||
No es para todo el mundo. Buscamos panaderías artesanales que quieran <strong>reducir desperdicios y aumentar ganancias</strong>
|
No es para todo el mundo. Buscamos panaderías que quieran <strong>reducir desperdicios y aumentar ganancias</strong>
|
||||||
con ayuda de IA, a cambio de feedback honesto.
|
con ayuda de IA, a cambio de feedback honesto.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="mt-10 flex flex-col sm:flex-row gap-6 justify-center">
|
<div className="mt-10 flex flex-col sm:flex-row gap-6 justify-center">
|
||||||
<Link to="/register?pilot=true">
|
<Link to="/register?pilot=true" className="w-full sm:w-auto">
|
||||||
<Button
|
<Button
|
||||||
size="lg"
|
size="lg"
|
||||||
className="px-10 py-5 text-lg font-bold bg-white text-[var(--color-primary)] hover:bg-[var(--bg-tertiary)] shadow-2xl hover:shadow-3xl transform hover:scale-105 transition-all duration-200 rounded-xl"
|
className="w-full sm:w-auto group relative px-10 py-5 text-lg font-bold bg-gradient-to-r from-[var(--color-primary)] to-orange-600 hover:from-[var(--color-primary-dark)] hover:to-orange-700 text-white shadow-2xl hover:shadow-3xl transform hover:scale-105 transition-all duration-300 rounded-xl overflow-hidden"
|
||||||
>
|
>
|
||||||
Solicitar Plaza en el Piloto
|
<span className="absolute inset-0 w-full h-full bg-gradient-to-r from-white/0 via-white/20 to-white/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-700"></span>
|
||||||
<ArrowRight className="ml-2 w-6 h-6" />
|
<span className="relative flex items-center justify-center gap-2">
|
||||||
</Button>
|
Solicitar Plaza en el Piloto
|
||||||
</Link>
|
<ArrowRight className="w-6 h-6 group-hover:translate-x-1 transition-transform duration-200" />
|
||||||
<Link to="/demo">
|
</span>
|
||||||
<Button
|
</Button>
|
||||||
size="lg"
|
</Link>
|
||||||
variant="outline"
|
<Link to="/demo" className="w-full sm:w-auto">
|
||||||
className="px-10 py-5 text-lg font-semibold border-2 border-white text-white hover:bg-white hover:text-[var(--color-primary)] transition-all duration-200 rounded-xl"
|
<Button
|
||||||
>
|
variant="outline"
|
||||||
<Play className="mr-2 w-5 h-5" />
|
size="lg"
|
||||||
Ver Cómo Funciona
|
className="w-full sm:w-auto group px-10 py-5 text-lg font-semibold border-3 border-[var(--color-primary)] text-[var(--text-primary)] hover:bg-[var(--color-primary)] hover:text-white hover:border-[var(--color-primary-dark)] shadow-lg hover:shadow-xl transition-all duration-300 rounded-xl backdrop-blur-sm bg-white/50 dark:bg-gray-800/50"
|
||||||
</Button>
|
>
|
||||||
</Link>
|
<span className="flex items-center justify-center gap-2">
|
||||||
|
<Play className="w-5 h-5 group-hover:scale-110 transition-transform duration-200" />
|
||||||
|
{t('landing:hero.cta_secondary', 'Ver Demo')}
|
||||||
|
</span>
|
||||||
|
</Button>
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Social Proof Alternative - Loss Aversion */}
|
{/* Social Proof Alternative - Loss Aversion */}
|
||||||
@@ -930,7 +935,7 @@ const LandingPage: React.FC = () => {
|
|||||||
<div className="grid grid-cols-1 sm:grid-cols-3 gap-6 text-sm">
|
<div className="grid grid-cols-1 sm:grid-cols-3 gap-6 text-sm">
|
||||||
<div className="flex flex-col items-center">
|
<div className="flex flex-col items-center">
|
||||||
<Award className="w-8 h-8 text-white mb-2" />
|
<Award className="w-8 h-8 text-white mb-2" />
|
||||||
<div className="text-white font-semibold">40% descuento de por vida</div>
|
<div className="text-white font-semibold">20% descuento de por vida</div>
|
||||||
<div className="text-white/70">Solo primeros 20</div>
|
<div className="text-white/70">Solo primeros 20</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col items-center">
|
<div className="flex flex-col items-center">
|
||||||
|
|||||||
@@ -311,6 +311,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
|
|||||||
try:
|
try:
|
||||||
# Connect to training service WebSocket
|
# Connect to training service WebSocket
|
||||||
import websockets
|
import websockets
|
||||||
|
from websockets.protocol import State
|
||||||
|
|
||||||
training_ws = await websockets.connect(
|
training_ws = await websockets.connect(
|
||||||
training_ws_url,
|
training_ws_url,
|
||||||
@@ -325,7 +326,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
|
|||||||
async def forward_frontend_to_training():
|
async def forward_frontend_to_training():
|
||||||
"""Forward messages from frontend to training service"""
|
"""Forward messages from frontend to training service"""
|
||||||
try:
|
try:
|
||||||
while training_ws and training_ws.open:
|
while training_ws and training_ws.state == State.OPEN:
|
||||||
data = await websocket.receive()
|
data = await websocket.receive()
|
||||||
|
|
||||||
if data.get("type") == "websocket.receive":
|
if data.get("type") == "websocket.receive":
|
||||||
@@ -342,7 +343,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
|
|||||||
"""Forward messages from training service to frontend"""
|
"""Forward messages from training service to frontend"""
|
||||||
message_count = 0
|
message_count = 0
|
||||||
try:
|
try:
|
||||||
while training_ws and training_ws.open:
|
while training_ws and training_ws.state == State.OPEN:
|
||||||
message = await training_ws.recv()
|
message = await training_ws.recv()
|
||||||
await websocket.send_text(message)
|
await websocket.send_text(message)
|
||||||
message_count += 1
|
message_count += 1
|
||||||
@@ -369,7 +370,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
|
|||||||
logger.error("WebSocket proxy error", job_id=job_id, error=str(e))
|
logger.error("WebSocket proxy error", job_id=job_id, error=str(e))
|
||||||
finally:
|
finally:
|
||||||
# Cleanup
|
# Cleanup
|
||||||
if training_ws and not training_ws.closed:
|
if training_ws and training_ws.state == State.OPEN:
|
||||||
try:
|
try:
|
||||||
await training_ws.close()
|
await training_ws.close()
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
PyJWT==2.8.0
|
PyJWT==2.10.1
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
prometheus-client==0.17.1
|
prometheus-client==0.23.1
|
||||||
python-json-logger==2.0.4
|
python-json-logger==3.3.0
|
||||||
email-validator==2.0.0
|
email-validator==2.2.0
|
||||||
aio-pika==9.3.0
|
aio-pika==9.4.3
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
python-logstash==0.4.8
|
python-logstash==0.4.8
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
websockets==12.0
|
websockets==14.1
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
|
cryptography==44.0.0
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: rabbitmq
|
- name: rabbitmq
|
||||||
image: rabbitmq:4.0-management-alpine
|
image: rabbitmq:4.1-management-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5672
|
- containerPort: 5672
|
||||||
name: amqp
|
name: amqp
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: redis
|
- name: redis
|
||||||
image: redis:7-alpine
|
image: redis:7.4-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 6379
|
- containerPort: 6379
|
||||||
name: redis
|
name: redis
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
name: postgres
|
name: postgres
|
||||||
@@ -62,8 +62,8 @@ spec:
|
|||||||
mountPath: /var/lib/postgresql/data
|
mountPath: /var/lib/postgresql/data
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
memory: "256Mi"
|
memory: "128Mi"
|
||||||
cpu: "250m"
|
cpu: "100m"
|
||||||
limits:
|
limits:
|
||||||
memory: "512Mi"
|
memory: "512Mi"
|
||||||
cpu: "500m"
|
cpu: "500m"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: check-data-initialized
|
- name: check-data-initialized
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: grafana
|
- name: grafana
|
||||||
image: grafana/grafana:10.2.2
|
image: grafana/grafana:12.3.0
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
name: http
|
name: http
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ spec:
|
|||||||
serviceAccountName: prometheus
|
serviceAccountName: prometheus
|
||||||
containers:
|
containers:
|
||||||
- name: prometheus
|
- name: prometheus
|
||||||
image: prom/prometheus:v2.48.0
|
image: prom/prometheus:v3.0.1
|
||||||
args:
|
args:
|
||||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||||
- '--storage.tsdb.path=/prometheus'
|
- '--storage.tsdb.path=/prometheus'
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-migration
|
- name: wait-for-migration
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
|
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h alert-processor-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h alert-processor-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h auth-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h auth-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h demo-session-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h demo-session-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h external-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h external-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h forecasting-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h forecasting-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h inventory-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h inventory-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h notification-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h notification-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h orders-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h orders-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h pos-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h pos-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h production-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h production-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h recipes-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h recipes-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h sales-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h sales-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h suppliers-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h suppliers-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h tenant-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h tenant-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h tenant-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h tenant-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: wait-for-db
|
- name: wait-for-db
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
command: ["sh", "-c", "until pg_isready -h training-db-service -p 5432; do sleep 2; done"]
|
command: ["sh", "-c", "until pg_isready -h training-db-service -p 5432; do sleep 2; done"]
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
auth-db:
|
auth-db:
|
||||||
image: postgres:15-alpine
|
image: postgres:17-alpine
|
||||||
container_name: auth-db
|
container_name: auth-db
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: auth_db
|
POSTGRES_DB: auth_db
|
||||||
@@ -21,7 +21,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:7.4-alpine
|
||||||
container_name: auth-redis
|
container_name: auth-redis
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6379:6379"
|
||||||
@@ -32,7 +32,7 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
image: rabbitmq:4.0-management-alpine
|
image: rabbitmq:4.1-management-alpine
|
||||||
container_name: auth-rabbitmq
|
container_name: auth-rabbitmq
|
||||||
environment:
|
environment:
|
||||||
RABBITMQ_DEFAULT_USER: bakery
|
RABBITMQ_DEFAULT_USER: bakery
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
pydantic==2.5.2
|
pydantic==2.12.3
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
|
cryptography==44.0.0
|
||||||
|
python-multipart==0.0.6
|
||||||
|
email-validator==2.2.0
|
||||||
|
pytz==2024.2
|
||||||
|
|||||||
@@ -1,65 +1,69 @@
|
|||||||
# services/auth/requirements.txt
|
# services/auth/requirements.txt
|
||||||
|
|
||||||
# FastAPI and ASGI
|
# FastAPI and ASGI
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
gunicorn==21.2.0
|
gunicorn==23.0.0
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.20.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# Authentication & Security
|
# Authentication & Security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
bcrypt==4.0.1
|
bcrypt==4.2.1
|
||||||
|
cryptography==44.0.0
|
||||||
|
PyJWT==2.10.1
|
||||||
|
|
||||||
# HTTP Client
|
# HTTP Client
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiohttp==3.9.1
|
aiohttp==3.11.10
|
||||||
|
|
||||||
# Data Validation
|
# Data Validation
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
email-validator==2.1.0
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Environment
|
# Environment
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.1
|
||||||
|
|
||||||
# Logging and Monitoring
|
# Logging and Monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|
||||||
|
# Message Queue
|
||||||
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
|
|
||||||
# Testing Dependencies
|
# Testing Dependencies
|
||||||
pytest==7.4.3
|
pytest==8.3.4
|
||||||
pytest-asyncio==0.21.1
|
pytest-asyncio==0.25.2
|
||||||
pytest-cov==4.1.0
|
pytest-cov==6.0.0
|
||||||
pytest-xdist==3.5.0
|
pytest-xdist==3.6.1
|
||||||
pytest-mock==3.12.0
|
pytest-mock==3.14.0
|
||||||
pytest-timeout==2.2.0
|
pytest-timeout==2.3.1
|
||||||
pytest-html==4.1.1
|
pytest-html==4.1.1
|
||||||
pytest-json-report==1.5.0
|
pytest-json-report==1.5.0
|
||||||
aiosqlite==0.19.0
|
|
||||||
|
|
||||||
# Test Utilities
|
# Test Utilities
|
||||||
factory-boy==3.3.0
|
factory-boy==3.3.1
|
||||||
faker==20.1.0
|
faker==33.1.0
|
||||||
freezegun==1.2.2
|
freezegun==1.5.1
|
||||||
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
black==23.11.0
|
black==24.10.0
|
||||||
isort==5.12.0
|
isort==5.13.2
|
||||||
flake8==6.1.0
|
flake8==7.1.1
|
||||||
mypy==1.7.1
|
mypy==1.14.1
|
||||||
pre-commit==3.6.0
|
pre-commit==4.0.1
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
sqlalchemy[asyncio]==2.0.23
|
sqlalchemy[asyncio]==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
typing-extensions>=4.5.0
|
typing-extensions>=4.5.0
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
PyJWT==2.8.0
|
PyJWT==2.10.1
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
cryptography==44.0.0
|
||||||
|
prometheus-client==0.23.1
|
||||||
|
aio-pika==9.4.3
|
||||||
|
email-validator==2.2.0
|
||||||
|
pytz==2024.2
|
||||||
|
|||||||
52
services/external/requirements.txt
vendored
52
services/external/requirements.txt
vendored
@@ -1,56 +1,56 @@
|
|||||||
# services/external/requirements.txt
|
# services/external/requirements.txt
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.20.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
|
|
||||||
# HTTP clients for external APIs
|
# HTTP clients for external APIs
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiofiles==23.2.0
|
aiofiles==24.1.0
|
||||||
requests==2.31.0
|
requests==2.32.3
|
||||||
|
|
||||||
# Data processing and time series
|
# Data processing and time series
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
|
|
||||||
# Validation and serialization
|
# Validation and serialization
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication and security
|
# Authentication and security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Message queues
|
# Message queues
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Background job processing
|
# Background job processing
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|
||||||
# Date and time handling
|
# Date and time handling
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
|
|
||||||
# XML parsing (for some APIs)
|
# XML parsing (for some APIs)
|
||||||
lxml==4.9.3
|
lxml==5.3.0
|
||||||
|
|
||||||
# Geospatial processing
|
# Geospatial processing
|
||||||
pyproj==3.6.1
|
pyproj==3.7.1
|
||||||
|
|
||||||
# Note: pytest and testing dependencies are in tests/requirements.txt
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
|
||||||
# External API specific
|
# External API specific
|
||||||
beautifulsoup4==4.12.2 # For web scraping if needed
|
beautifulsoup4==4.12.3
|
||||||
xmltodict==0.13.0 # For XML API responses
|
xmltodict==0.14.2
|
||||||
|
|||||||
@@ -1,47 +1,51 @@
|
|||||||
# Core FastAPI dependencies
|
# Core FastAPI dependencies
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy[asyncio]==2.0.23
|
sqlalchemy[asyncio]==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.13.1
|
alembic==1.17.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# Authentication & Security
|
# Authentication & Security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# HTTP Client
|
# HTTP Client
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiohttp==3.9.1
|
aiohttp==3.11.10
|
||||||
|
|
||||||
# Date parsing
|
# Date parsing
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.2
|
||||||
|
|
||||||
# Machine Learning
|
# Machine Learning
|
||||||
prophet==1.1.4
|
prophet==1.1.6
|
||||||
scikit-learn==1.3.2
|
scikit-learn==1.6.1
|
||||||
pandas==2.1.4
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
joblib==1.3.2
|
joblib==1.4.2
|
||||||
|
|
||||||
# Messaging
|
# Messaging
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Scheduling
|
# Scheduling
|
||||||
APScheduler==3.10.4
|
APScheduler==3.10.4
|
||||||
|
|
||||||
# Monitoring & Logging
|
# Monitoring & Logging
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
redis==6.4.0
|
||||||
|
|
||||||
# Development dependencies
|
# Development dependencies
|
||||||
pytest==7.4.3
|
pytest==8.3.4
|
||||||
pytest-asyncio==0.21.1
|
pytest-asyncio==0.25.2
|
||||||
pytest-cov==4.1.0
|
pytest-cov==6.0.0
|
||||||
|
email-validator==2.2.0
|
||||||
redis==5.0.1
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,38 +1,40 @@
|
|||||||
# services/inventory/requirements.txt
|
# services/inventory/requirements.txt
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.20.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
|
|
||||||
# Data processing
|
# Data processing
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiofiles==23.2.0
|
aiofiles==24.1.0
|
||||||
|
|
||||||
# Validation and serialization
|
# Validation and serialization
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication and security
|
# Authentication and security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Message queues and Redis
|
# Message queues and Redis
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
redis>=4.0.0
|
redis==6.4.0
|
||||||
|
|
||||||
# Scheduling
|
# Scheduling
|
||||||
APScheduler==3.10.4
|
APScheduler==3.10.4
|
||||||
@@ -43,3 +45,5 @@ qrcode[pil]==7.4.2
|
|||||||
|
|
||||||
# Development
|
# Development
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.2
|
||||||
|
|||||||
@@ -1,45 +1,46 @@
|
|||||||
# FastAPI and dependencies
|
# FastAPI and dependencies
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
sse-starlette==1.6.5
|
sse-starlette==2.2.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.13.1
|
alembic==1.17.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# Authentication & Security
|
# Authentication & Security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# HTTP Client
|
# HTTP Client
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiofiles==23.2.1
|
aiofiles==24.1.0
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
aiosmtplib==3.0.1
|
aiosmtplib==3.0.2
|
||||||
email-validator==2.1.0
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Messaging & Redis
|
# Messaging & Redis
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|
||||||
# Template Engine
|
# Template Engine
|
||||||
jinja2==3.1.2
|
jinja2==3.1.5
|
||||||
|
|
||||||
# Monitoring & Logging
|
# Monitoring & Logging
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
|
|
||||||
# Development & Testing
|
# Development & Testing
|
||||||
pytest==7.4.3
|
pytest==8.3.4
|
||||||
pytest-asyncio==0.21.1
|
pytest-asyncio==0.25.2
|
||||||
pytest-mock==3.12.0
|
pytest-mock==3.14.0
|
||||||
httpx==0.25.2
|
|
||||||
|
|||||||
@@ -1,40 +1,44 @@
|
|||||||
# Orders Service Dependencies
|
# Orders Service Dependencies
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.13.1
|
alembic==1.17.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
|
|
||||||
# Redis for caching
|
# Redis for caching
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|
||||||
# Message queuing
|
# Message queuing
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Scheduling
|
# Scheduling
|
||||||
apscheduler==3.10.4
|
APScheduler==3.10.4
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Date and time utilities
|
# Date and time utilities
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.2
|
||||||
|
|
||||||
# Validation and utilities
|
# Validation and utilities
|
||||||
email-validator==2.1.0
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Development dependencies (optional)
|
# Development dependencies
|
||||||
pytest==7.4.3
|
python-multipart==0.0.6
|
||||||
pytest-asyncio==0.21.1
|
pytest==8.3.4
|
||||||
|
pytest-asyncio==0.25.2
|
||||||
|
|||||||
@@ -1,16 +1,21 @@
|
|||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.13.1
|
alembic==1.17.0
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
aiohttp==3.9.1
|
aiohttp==3.11.10
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
celery==5.3.4
|
celery==5.4.0
|
||||||
cryptography>=41.0.0
|
cryptography==44.0.0
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
websockets==12.0
|
websockets==14.1
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
python-multipart==0.0.6
|
||||||
|
aio-pika==9.4.3
|
||||||
|
email-validator==2.2.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
pytz==2024.2
|
||||||
|
|||||||
@@ -1,38 +1,42 @@
|
|||||||
# Production Service Dependencies
|
# Production Service Dependencies
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.13.1
|
alembic==1.17.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Message queues and Redis
|
# Message queues and Redis
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
redis>=4.0.0
|
redis==6.4.0
|
||||||
|
|
||||||
# Scheduling
|
# Scheduling
|
||||||
APScheduler==3.10.4
|
APScheduler==3.10.4
|
||||||
|
|
||||||
# Date and time utilities
|
# Date and time utilities
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.2
|
||||||
|
|
||||||
# Validation and utilities
|
# Validation and utilities
|
||||||
email-validator==2.1.0
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Development dependencies (optional)
|
# Development dependencies
|
||||||
pytest==7.4.3
|
python-multipart==0.0.6
|
||||||
pytest-asyncio==0.21.1
|
pytest==8.3.4
|
||||||
|
pytest-asyncio==0.25.2
|
||||||
|
|||||||
@@ -1,63 +1,62 @@
|
|||||||
# Recipe Service Dependencies
|
# Recipe Service Dependencies
|
||||||
|
|
||||||
# FastAPI and server
|
# FastAPI and server
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
|
|
||||||
# Data validation
|
# Data validation
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
email-validator==2.1.0
|
email-validator==2.2.0
|
||||||
|
|
||||||
# HTTP requests
|
# HTTP requests
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
requests==2.31.0
|
requests==2.32.3
|
||||||
|
|
||||||
# Async support
|
# Async support
|
||||||
asyncio-mqtt==0.16.1
|
asyncio-mqtt==0.16.2
|
||||||
aiofiles==23.2.1
|
aiofiles==24.1.0
|
||||||
|
|
||||||
# Messaging
|
# Messaging
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Caching (optional)
|
# Caching
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
python-redis-cache==0.1.0
|
python-redis-cache==0.1.0
|
||||||
|
|
||||||
# Monitoring and logging
|
# Monitoring and logging
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
python-json-logger==2.0.4
|
python-json-logger==3.3.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Date/time handling
|
# Date/time handling
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
|
|
||||||
# Data processing
|
# Data processing
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
|
|
||||||
# Authentication and security
|
# Authentication and security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
python-multipart==0.0.6
|
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Environment management
|
# Environment management
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.1
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
pytest==7.4.3
|
pytest==8.3.4
|
||||||
pytest-asyncio==0.21.1
|
pytest-asyncio==0.25.2
|
||||||
httpx==0.25.2
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
black==23.11.0
|
black==24.10.0
|
||||||
flake8==6.1.0
|
flake8==7.1.1
|
||||||
mypy==1.7.1
|
mypy==1.14.1
|
||||||
|
|||||||
@@ -1,40 +1,42 @@
|
|||||||
# services/sales/requirements.txt
|
# services/sales/requirements.txt
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.20.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
|
|
||||||
# Data processing
|
# Data processing
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiofiles==23.2.0
|
aiofiles==24.1.0
|
||||||
|
|
||||||
# Validation and serialization
|
# Validation and serialization
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication and security
|
# Authentication and security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Message queues
|
# Message queues
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Note: pytest and testing dependencies are in tests/requirements.txt
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.2
|
||||||
|
|||||||
@@ -1,42 +1,44 @@
|
|||||||
# services/suppliers/requirements.txt
|
# services/suppliers/requirements.txt
|
||||||
# FastAPI and web framework
|
# FastAPI and web framework
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.20.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
|
|
||||||
# Data processing
|
# Data processing
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.25.2
|
numpy==2.2.2
|
||||||
|
|
||||||
# HTTP clients
|
# HTTP clients
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
aiofiles==23.2.0
|
aiofiles==24.1.0
|
||||||
|
|
||||||
# Validation and serialization
|
# Validation and serialization
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.0.3
|
pydantic-settings==2.7.1
|
||||||
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication and security
|
# Authentication and security
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Logging and monitoring
|
# Logging and monitoring
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Message queues
|
# Message queues
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Additional for supplier management
|
# Additional for supplier management
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
email-validator==2.1.0
|
pytz==2024.2
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|||||||
@@ -1,18 +1,21 @@
|
|||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
aio-pika==9.3.0
|
aio-pika==9.4.3
|
||||||
prometheus-client==0.17.1
|
prometheus-client==0.23.1
|
||||||
python-json-logger==2.0.4
|
python-json-logger==3.3.0
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
python-logstash==0.4.8
|
python-logstash==0.4.8
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
stripe==7.4.0
|
stripe==11.3.0
|
||||||
|
python-multipart==0.0.6
|
||||||
|
cryptography==44.0.0
|
||||||
|
email-validator==2.2.0
|
||||||
|
|||||||
@@ -1,54 +1,54 @@
|
|||||||
# services/training/requirements.txt
|
# services/training/requirements.txt
|
||||||
# FastAPI and server
|
# FastAPI and server
|
||||||
fastapi==0.104.1
|
fastapi==0.119.0
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.32.1
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlalchemy==2.0.23
|
sqlalchemy==2.0.44
|
||||||
asyncpg==0.29.0
|
asyncpg==0.30.0
|
||||||
alembic==1.12.1
|
alembic==1.17.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.10
|
||||||
|
|
||||||
# ML libraries
|
# ML libraries
|
||||||
prophet==1.1.5
|
prophet==1.1.6
|
||||||
scikit-learn==1.3.2
|
scikit-learn==1.6.1
|
||||||
pandas==2.1.3
|
pandas==2.2.3
|
||||||
numpy==1.24.4
|
numpy==2.2.2
|
||||||
joblib==1.3.2
|
joblib==1.4.2
|
||||||
|
|
||||||
# HTTP client
|
# HTTP client
|
||||||
httpx==0.25.2
|
httpx==0.28.1
|
||||||
|
|
||||||
# Validation
|
# Validation
|
||||||
pydantic==2.5.0
|
pydantic==2.12.3
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.7.1
|
||||||
|
email-validator==2.2.0
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
python-multipart==0.0.6
|
cryptography==44.0.0
|
||||||
|
|
||||||
# Messaging
|
# Messaging
|
||||||
aio-pika==9.3.1
|
aio-pika==9.4.3
|
||||||
|
|
||||||
# Monitoring and logging
|
# Monitoring and logging
|
||||||
structlog==23.2.0
|
structlog==25.4.0
|
||||||
prometheus-client==0.19.0
|
prometheus-client==0.23.1
|
||||||
|
|
||||||
# Development and testing
|
# Development and testing
|
||||||
pytest==7.4.3
|
pytest==8.3.4
|
||||||
pytest-asyncio==0.21.1
|
pytest-asyncio==0.25.2
|
||||||
pytest-mock==3.12.0
|
pytest-mock==3.14.0
|
||||||
httpx==0.25.2
|
pytest-cov==6.0.0
|
||||||
pytest-cov==4.1.0
|
coverage==7.6.9
|
||||||
coverage==7.3.2
|
psutil==6.1.1
|
||||||
psutil==5.9.0
|
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.9.0.post0
|
||||||
pytz==2023.3
|
pytz==2024.2
|
||||||
|
|
||||||
# Hyperparameter optimization
|
# Hyperparameter optimization
|
||||||
optuna==3.4.0
|
optuna==4.2.0
|
||||||
redis==5.0.1
|
redis==6.4.0
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from typing import Optional, Dict, Any, List
|
|||||||
from sqlalchemy import create_engine, text
|
from sqlalchemy import create_engine, text
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
|
||||||
from sqlalchemy.orm import sessionmaker, declarative_base
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
||||||
from sqlalchemy.pool import StaticPool, QueuePool
|
from sqlalchemy.pool import StaticPool
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
import structlog
|
import structlog
|
||||||
import time
|
import time
|
||||||
@@ -48,25 +48,25 @@ class DatabaseManager:
|
|||||||
self.pool_size = pool_size
|
self.pool_size = pool_size
|
||||||
self.max_overflow = max_overflow
|
self.max_overflow = max_overflow
|
||||||
|
|
||||||
# Configure pool class based on database type
|
# Configure pool for async engines
|
||||||
poolclass = QueuePool
|
# Note: SQLAlchemy 2.0 async engines automatically use AsyncAdaptedQueuePool
|
||||||
if "sqlite" in database_url.lower():
|
# We should NOT specify poolclass for async engines unless using StaticPool for SQLite
|
||||||
poolclass = StaticPool
|
|
||||||
pool_size = 1
|
|
||||||
max_overflow = 0
|
|
||||||
|
|
||||||
# Create async engine with enhanced configuration
|
|
||||||
engine_config = {
|
engine_config = {
|
||||||
"echo": echo,
|
"echo": echo,
|
||||||
"pool_pre_ping": pool_pre_ping,
|
"pool_pre_ping": pool_pre_ping,
|
||||||
"pool_recycle": pool_recycle,
|
"pool_recycle": pool_recycle,
|
||||||
"pool_size": pool_size,
|
"pool_size": pool_size,
|
||||||
"max_overflow": max_overflow,
|
"max_overflow": max_overflow,
|
||||||
"poolclass": poolclass,
|
|
||||||
"connect_args": {"command_timeout": connect_timeout},
|
"connect_args": {"command_timeout": connect_timeout},
|
||||||
**engine_kwargs
|
**engine_kwargs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Only set poolclass for SQLite (requires StaticPool for async)
|
||||||
|
if "sqlite" in database_url.lower():
|
||||||
|
engine_config["poolclass"] = StaticPool
|
||||||
|
engine_config["pool_size"] = 1
|
||||||
|
engine_config["max_overflow"] = 0
|
||||||
|
|
||||||
self.async_engine = create_async_engine(database_url, **engine_config)
|
self.async_engine = create_async_engine(database_url, **engine_config)
|
||||||
|
|
||||||
# Create session factory
|
# Create session factory
|
||||||
|
|||||||
Reference in New Issue
Block a user