Update requirements and insfra versions

This commit is contained in:
Urtzi Alfaro
2025-10-17 23:09:40 +02:00
parent 7e089b80cf
commit 312e36c893
81 changed files with 524 additions and 476 deletions

View File

@@ -49,13 +49,13 @@ services:
# ================================================================
redis:
image: redis:7-alpine
image: redis:7.4-alpine
container_name: bakery-redis
restart: unless-stopped
# ONLY use environment substitution from .env
command: >
redis-server
--appendonly yes
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD}
--maxmemory ${REDIS_MAX_MEMORY:-512mb}
--databases 16
@@ -73,7 +73,7 @@ services:
retries: 3
rabbitmq:
image: rabbitmq:4.0-management-alpine
image: rabbitmq:4.1-management-alpine
container_name: bakery-rabbitmq
restart: unless-stopped
# ONLY use environment substitution from .env
@@ -101,7 +101,7 @@ services:
# ================================================================
auth-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-auth-db
restart: unless-stopped
# ONLY reference .env variables
@@ -123,7 +123,7 @@ services:
retries: 5
training-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-training-db
restart: unless-stopped
environment:
@@ -144,7 +144,7 @@ services:
retries: 5
forecasting-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-forecasting-db
restart: unless-stopped
environment:
@@ -165,7 +165,7 @@ services:
retries: 5
sales-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-sales-db
restart: unless-stopped
environment:
@@ -186,7 +186,7 @@ services:
retries: 5
external-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-external-db
restart: unless-stopped
environment:
@@ -207,7 +207,7 @@ services:
retries: 5
tenant-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-tenant-db
restart: unless-stopped
environment:
@@ -228,7 +228,7 @@ services:
retries: 5
notification-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-notification-db
restart: unless-stopped
environment:
@@ -249,7 +249,7 @@ services:
retries: 5
inventory-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-inventory-db
restart: unless-stopped
environment:
@@ -270,7 +270,7 @@ services:
retries: 5
recipes-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-recipes-db
restart: unless-stopped
environment:
@@ -291,7 +291,7 @@ services:
retries: 5
suppliers-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-suppliers-db
restart: unless-stopped
environment:
@@ -312,7 +312,7 @@ services:
retries: 5
pos-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-pos-db
restart: unless-stopped
environment:
@@ -333,7 +333,7 @@ services:
retries: 5
orders-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-orders-db
restart: unless-stopped
environment:
@@ -354,7 +354,7 @@ services:
retries: 5
production-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-production-db
restart: unless-stopped
environment:
@@ -375,7 +375,7 @@ services:
retries: 5
alert-processor-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: bakery-alert-processor-db
restart: unless-stopped
environment:
@@ -401,7 +401,7 @@ services:
# ================================================================
nominatim-db:
image: postgis/postgis:15-3.3 # Use PostGIS enabled PostgreSQL image
image: postgis/postgis:17-3.5
container_name: bakery-nominatim-db
restart: unless-stopped
environment:
@@ -409,14 +409,14 @@ services:
- POSTGRES_USER=${NOMINATIM_DB_USER}
- POSTGRES_PASSWORD=${NOMINATIM_DB_PASSWORD}
- 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:
- nominatim_db_data:/var/lib/postgresql/data
profiles:
- development
networks:
bakery-network:
ipv4_address: 172.20.0.30 # Assign a static IP for Nominatim to find it
ipv4_address: 172.20.0.30
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${NOMINATIM_DB_USER} -d ${NOMINATIM_DB_NAME}"]
interval: 10s
@@ -1023,7 +1023,7 @@ services:
# ================================================================
prometheus:
image: prom/prometheus:v2.45.0
image: prom/prometheus:v3.0.1
container_name: bakery-prometheus
restart: unless-stopped
command:
@@ -1041,7 +1041,7 @@ services:
ipv4_address: 172.20.0.200
grafana:
image: grafana/grafana:10.0.0
image: grafana/grafana:12.3.0
container_name: bakery-grafana
restart: unless-stopped
environment:
@@ -1101,7 +1101,7 @@ services:
# ================================================================
pgadmin:
image: dpage/pgadmin4:7.4
image: dpage/pgadmin4:8.14
container_name: bakery-pgadmin
restart: unless-stopped
environment:

View File

@@ -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">
<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">
40% descuento de por vida
20% descuento de por vida
</span>
</div>
</div>

View File

@@ -10,7 +10,7 @@
"badge_sustainability": "Food Waste Reduction",
"title_line1": "Increase Profits,",
"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": {
"title": "Pilot Launch!",
"offer": "3 MONTHS FREE",
@@ -38,7 +38,7 @@
"benefits": {
"founders_beta": {
"title": "Founders Beta",
"description": "Lifetime access with 40% discount"
"description": "Lifetime access with 20% discount"
},
"influence_product": {
"title": "Influence the Product",
@@ -165,7 +165,7 @@
"what_you_get": {
"title": "What You Get",
"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",
"priority_features": "<strong>Your ideas implemented first</strong> - we build what you really need",
"cancel_anytime": "<strong>Cancel anytime</strong> without explanations or penalties"
@@ -231,7 +231,7 @@
"why_now": {
"title": "Why act now?",
"lifetime_discount": {
"title": "40% lifetime discount",
"title": "20% lifetime discount",
"subtitle": "First 20 only"
},
"influence": {

View File

@@ -10,7 +10,7 @@
"badge_sustainability": "Reducción de Desperdicio Alimentario",
"title_line1": "Aumenta Ganancias,",
"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": {
"title": "¡Lanzamiento Piloto!",
"offer": "3 MESES GRATIS",
@@ -38,7 +38,7 @@
"benefits": {
"founders_beta": {
"title": "Founders Beta",
"description": "Acceso de por vida con 40% descuento"
"description": "Acceso de por vida con 20% descuento"
},
"influence_product": {
"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.",
"ai_prediction": {
"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": {
"accuracy": "Precisión del 92% en predicciones",
"learning": "Aprendizaje continuo y adaptativo",
@@ -165,7 +165,7 @@
"what_you_get": {
"title": "Lo Que Obtienes",
"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",
"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"
@@ -191,7 +191,7 @@
},
"team": {
"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": {
"title": "¿Por qué actuar ahora?",
"lifetime_discount": {
"title": "40% descuento de por vida",
"title": "20% descuento de por vida",
"subtitle": "Solo primeros 20"
},
"influence": {

View File

@@ -10,7 +10,7 @@
"badge_sustainability": "Elikagai Hondakinen Murrizketa",
"title_line1": "Handitu Irabaziak,",
"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": {
"title": "Pilotu Abiapena!",
"offer": "3 HILABETE DOAN",
@@ -38,7 +38,7 @@
"benefits": {
"founders_beta": {
"title": "Sortzaileen Beta",
"description": "Bizitza osoko sarbidea %40 deskontuarekin"
"description": "Bizitza osoko sarbidea %20 deskontuarekin"
},
"influence_product": {
"title": "Eragin Produktuan",
@@ -165,7 +165,7 @@
"what_you_get": {
"title": "Zer Lortzen Duzu",
"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",
"priority_features": "<strong>Zure ideiak lehenik gauzatzen dira</strong> - benetan behar duzuna eraikitzen dugu",
"cancel_anytime": "<strong>Edozein unetan ezeztatu</strong> azalpenik edo zigorrekin"
@@ -231,7 +231,7 @@
"why_now": {
"title": "Zergatik jardun orain?",
"lifetime_discount": {
"title": "%40 bizitza osoko deskontua",
"title": "%20 bizitza osoko deskontua",
"subtitle": "Lehenengo 20entzat bakarrik"
},
"influence": {

View File

@@ -53,7 +53,7 @@
},
"rainy_day": {
"condition": "Euri Eguna",
"impact": "%40ko igoera produktu beroetan",
"impact": "%20ko igoera produktu beroetan",
"recommendations": [
"Zopa eta saltsa gehiago",
"Txokolate beroak",

View File

@@ -252,7 +252,7 @@ const AboutPage: React.FC = () => {
</h2>
<p className="text-xl text-white/90 mb-8 leading-relaxed">
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>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<Link

View File

@@ -31,7 +31,7 @@ const BlogPage: React.FC = () => {
content: `
# 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
@@ -91,7 +91,7 @@ El desperdicio alimentario no solo afecta tu rentabilidad, también el medioambi
id: '2',
slug: 'ia-predecir-demanda-panaderia',
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: `
# 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?
</h2>
<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>
<Link
to="/register"

View File

@@ -156,7 +156,7 @@ const FeedbackPage: React.FC = () => {
<span className="block text-[var(--color-primary)]">Panadería IA</span>
</h1>
<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>
</div>
</div>

View File

@@ -90,7 +90,7 @@ const HelpCenterPage: React.FC = () => {
{
category: 'general',
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',
@@ -105,7 +105,7 @@ const HelpCenterPage: React.FC = () => {
{
category: 'pricing',
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',
@@ -115,7 +115,7 @@ const HelpCenterPage: React.FC = () => {
{
category: 'pricing',
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',

View File

@@ -76,7 +76,7 @@ const LandingPage: React.FC = () => {
</h1>
<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>
{/* Pilot Launch Banner */}
@@ -202,7 +202,7 @@ const LandingPage: React.FC = () => {
<Award className="w-6 h-6 text-green-600 dark:text-green-400" />
</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 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">
<h3 className="text-xl font-bold text-[var(--text-primary)]">IA Avanzada de Predicción</h3>
<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>
<div className="mt-6 space-y-3">
<div className="flex items-center text-sm">
@@ -550,7 +550,7 @@ const LandingPage: React.FC = () => {
<div className="text-center mb-16">
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)]">
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>
<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.
@@ -687,7 +687,7 @@ const LandingPage: React.FC = () => {
Sin Riesgo. Sin Ataduras.
</h2>
<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>
</div>
@@ -707,7 +707,7 @@ const LandingPage: React.FC = () => {
</li>
<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" />
<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 className="flex items-start gap-3">
<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>
<h4 className="font-semibold text-[var(--text-primary)] mb-2">Equipo Experto</h4>
<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>
</div>
</div>
@@ -896,30 +896,35 @@ const LandingPage: React.FC = () => {
<span className="block text-white/90 mt-2">En Probar Esta Tecnología</span>
</h2>
<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.
</p>
<div className="mt-10 flex flex-col sm:flex-row gap-6 justify-center">
<Link to="/register?pilot=true">
<Button
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"
>
Solicitar Plaza en el Piloto
<ArrowRight className="ml-2 w-6 h-6" />
</Button>
</Link>
<Link to="/demo">
<Button
size="lg"
variant="outline"
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"
>
<Play className="mr-2 w-5 h-5" />
Ver Cómo Funciona
</Button>
</Link>
<Link to="/register?pilot=true" className="w-full sm:w-auto">
<Button
size="lg"
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"
>
<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>
<span className="relative flex items-center justify-center gap-2">
Solicitar Plaza en el Piloto
<ArrowRight className="w-6 h-6 group-hover:translate-x-1 transition-transform duration-200" />
</span>
</Button>
</Link>
<Link to="/demo" className="w-full sm:w-auto">
<Button
variant="outline"
size="lg"
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"
>
<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>
{/* 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="flex flex-col items-center">
<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>
<div className="flex flex-col items-center">

View File

@@ -311,6 +311,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
try:
# Connect to training service WebSocket
import websockets
from websockets.protocol import State
training_ws = await websockets.connect(
training_ws_url,
@@ -325,7 +326,7 @@ async def websocket_training_progress(websocket: WebSocket, tenant_id: str, job_
async def forward_frontend_to_training():
"""Forward messages from frontend to training service"""
try:
while training_ws and training_ws.open:
while training_ws and training_ws.state == State.OPEN:
data = await 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"""
message_count = 0
try:
while training_ws and training_ws.open:
while training_ws and training_ws.state == State.OPEN:
message = await training_ws.recv()
await websocket.send_text(message)
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))
finally:
# Cleanup
if training_ws and not training_ws.closed:
if training_ws and training_ws.state == State.OPEN:
try:
await training_ws.close()
except:

View File

@@ -1,19 +1,20 @@
fastapi==0.104.1
uvicorn[standard]==0.24.0
httpx==0.25.2
redis==5.0.1
pydantic==2.5.0
pydantic-settings==2.1.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
httpx==0.28.1
redis==6.4.0
pydantic==2.12.3
pydantic-settings==2.7.1
python-jose[cryptography]==3.3.0
PyJWT==2.8.0
PyJWT==2.10.1
python-multipart==0.0.6
prometheus-client==0.17.1
python-json-logger==2.0.4
email-validator==2.0.0
aio-pika==9.3.0
pytz==2023.3
prometheus-client==0.23.1
python-json-logger==3.3.0
email-validator==2.2.0
aio-pika==9.4.3
pytz==2024.2
python-logstash==0.4.8
structlog==23.2.0
websockets==12.0
sqlalchemy==2.0.23
asyncpg==0.29.0
structlog==25.4.0
websockets==14.1
sqlalchemy==2.0.44
asyncpg==0.30.0
cryptography==44.0.0

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: rabbitmq
image: rabbitmq:4.0-management-alpine
image: rabbitmq:4.1-management-alpine
ports:
- containerPort: 5672
name: amqp

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: redis
image: redis:7-alpine
image: redis:7.4-alpine
ports:
- containerPort: 6379
name: redis

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres

View File

@@ -38,7 +38,7 @@ spec:
spec:
containers:
- name: postgres
image: postgres:15-alpine
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres
@@ -62,8 +62,8 @@ spec:
mountPath: /var/lib/postgresql/data
resources:
requests:
memory: "256Mi"
cpu: "250m"
memory: "128Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"

View File

@@ -25,7 +25,7 @@ spec:
spec:
initContainers:
- name: check-data-initialized
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -55,7 +55,7 @@ spec:
spec:
containers:
- name: grafana
image: grafana/grafana:10.2.2
image: grafana/grafana:12.3.0
ports:
- containerPort: 3000
name: http

View File

@@ -135,7 +135,7 @@ spec:
serviceAccountName: prometheus
containers:
- name: prometheus
image: prom/prometheus:v2.48.0
image: prom/prometheus:v3.0.1
args:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
spec:
initContainers:
- name: wait-for-migration
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -21,7 +21,7 @@ spec:
initContainers:
- name: wait-for-db
image: postgres:15-alpine
image: postgres:17-alpine
command:
- sh
- -c

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -17,7 +17,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -18,7 +18,7 @@ spec:
spec:
initContainers:
- 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"]
resources:
requests:

View File

@@ -4,7 +4,7 @@
services:
auth-db:
image: postgres:15-alpine
image: postgres:17-alpine
container_name: auth-db
environment:
POSTGRES_DB: auth_db
@@ -21,7 +21,7 @@ services:
retries: 5
redis:
image: redis:7-alpine
image: redis:7.4-alpine
container_name: auth-redis
ports:
- "6379:6379"
@@ -32,7 +32,7 @@ services:
retries: 5
rabbitmq:
image: rabbitmq:4.0-management-alpine
image: rabbitmq:4.1-management-alpine
container_name: auth-rabbitmq
environment:
RABBITMQ_DEFAULT_USER: bakery

View File

@@ -1,14 +1,18 @@
fastapi==0.104.1
uvicorn[standard]==0.24.0
aio-pika==9.3.1
redis==5.0.1
asyncpg==0.29.0
sqlalchemy==2.0.23
alembic==1.12.1
psycopg2-binary==2.9.9
structlog==23.2.0
prometheus-client==0.19.0
pydantic-settings==2.1.0
pydantic==2.5.2
httpx==0.25.2
fastapi==0.119.0
uvicorn[standard]==0.32.1
aio-pika==9.4.3
redis==6.4.0
asyncpg==0.30.0
sqlalchemy==2.0.44
alembic==1.17.0
psycopg2-binary==2.9.10
structlog==25.4.0
prometheus-client==0.23.1
pydantic-settings==2.7.1
pydantic==2.12.3
httpx==0.28.1
python-jose[cryptography]==3.3.0
cryptography==44.0.0
python-multipart==0.0.6
email-validator==2.2.0
pytz==2024.2

View File

@@ -1,65 +1,69 @@
# services/auth/requirements.txt
# FastAPI and ASGI
fastapi==0.104.1
uvicorn[standard]==0.24.0
gunicorn==21.2.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
gunicorn==23.0.0
# Database
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.12.1
aiosqlite==0.19.0
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
aiosqlite==0.20.0
psycopg2-binary==2.9.10
# Authentication & Security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6
bcrypt==4.0.1
bcrypt==4.2.1
cryptography==44.0.0
PyJWT==2.10.1
# HTTP Client
httpx==0.25.2
aiohttp==3.9.1
httpx==0.28.1
aiohttp==3.11.10
# Data Validation
pydantic==2.5.0
pydantic-settings==2.0.3
email-validator==2.1.0
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Environment
python-dotenv==1.0.0
python-dotenv==1.0.1
# Logging and Monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Redis
redis==5.0.1
redis==6.4.0
# Message Queue
aio-pika==9.4.3
# Utilities
python-dateutil==2.8.2
pytz==2023.3
python-dateutil==2.9.0.post0
pytz==2024.2
# Testing Dependencies
pytest==7.4.3
pytest-asyncio==0.21.1
pytest-cov==4.1.0
pytest-xdist==3.5.0
pytest-mock==3.12.0
pytest-timeout==2.2.0
pytest==8.3.4
pytest-asyncio==0.25.2
pytest-cov==6.0.0
pytest-xdist==3.6.1
pytest-mock==3.14.0
pytest-timeout==2.3.1
pytest-html==4.1.1
pytest-json-report==1.5.0
aiosqlite==0.19.0
# Test Utilities
factory-boy==3.3.0
faker==20.1.0
freezegun==1.2.2
factory-boy==3.3.1
faker==33.1.0
freezegun==1.5.1
# Development
black==23.11.0
isort==5.12.0
flake8==6.1.0
mypy==1.7.1
pre-commit==3.6.0
black==24.10.0
isort==5.13.2
flake8==7.1.1
mypy==1.14.1
pre-commit==4.0.1

View File

@@ -1,14 +1,19 @@
fastapi==0.104.1
uvicorn[standard]==0.24.0
sqlalchemy[asyncio]==2.0.23
asyncpg==0.29.0
psycopg2-binary==2.9.9
alembic==1.12.1
redis==5.0.1
structlog==23.2.0
pydantic==2.5.0
pydantic-settings==2.1.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
sqlalchemy[asyncio]==2.0.44
asyncpg==0.30.0
psycopg2-binary==2.9.10
alembic==1.17.0
redis==6.4.0
structlog==25.4.0
pydantic==2.12.3
pydantic-settings==2.7.1
typing-extensions>=4.5.0
httpx==0.25.2
PyJWT==2.8.0
httpx==0.28.1
PyJWT==2.10.1
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

View File

@@ -1,56 +1,56 @@
# services/external/requirements.txt
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
asyncpg==0.29.0
aiosqlite==0.19.0
alembic==1.12.1
sqlalchemy==2.0.44
psycopg2-binary==2.9.10
asyncpg==0.30.0
aiosqlite==0.20.0
alembic==1.17.0
# HTTP clients for external APIs
httpx==0.25.2
aiofiles==23.2.0
requests==2.31.0
httpx==0.28.1
aiofiles==24.1.0
requests==2.32.3
# Data processing and time series
pandas==2.1.3
numpy==1.25.2
pandas==2.2.3
numpy==2.2.2
# Validation and serialization
pydantic==2.5.0
pydantic-settings==2.0.3
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Authentication and security
python-jose[cryptography]==3.3.0
cryptography==44.0.0
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Message queues
aio-pika==9.3.1
aio-pika==9.4.3
# Background job processing
redis==5.0.1
redis==6.4.0
# Date and time handling
pytz==2023.3
python-dateutil==2.8.2
pytz==2024.2
python-dateutil==2.9.0.post0
# XML parsing (for some APIs)
lxml==4.9.3
lxml==5.3.0
# Geospatial processing
pyproj==3.6.1
# Note: pytest and testing dependencies are in tests/requirements.txt
pyproj==3.7.1
# Development
python-multipart==0.0.6
# External API specific
beautifulsoup4==4.12.2 # For web scraping if needed
xmltodict==0.13.0 # For XML API responses
beautifulsoup4==4.12.3
xmltodict==0.14.2

View File

@@ -1,47 +1,51 @@
# Core FastAPI dependencies
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
pydantic-settings==2.1.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
pydantic==2.12.3
pydantic-settings==2.7.1
# Database
sqlalchemy[asyncio]==2.0.23
asyncpg==0.29.0
alembic==1.13.1
sqlalchemy[asyncio]==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
# Authentication & Security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6
cryptography==44.0.0
# HTTP Client
httpx==0.25.2
aiohttp==3.9.1
httpx==0.28.1
aiohttp==3.11.10
# Date parsing
python-dateutil==2.8.2
python-dateutil==2.9.0.post0
pytz==2024.2
# Machine Learning
prophet==1.1.4
scikit-learn==1.3.2
pandas==2.1.4
numpy==1.25.2
joblib==1.3.2
prophet==1.1.6
scikit-learn==1.6.1
pandas==2.2.3
numpy==2.2.2
joblib==1.4.2
# Messaging
aio-pika==9.3.1
aio-pika==9.4.3
# Scheduling
APScheduler==3.10.4
# Monitoring & Logging
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Redis
redis==6.4.0
# Development dependencies
pytest==7.4.3
pytest-asyncio==0.21.1
pytest-cov==4.1.0
redis==5.0.1
pytest==8.3.4
pytest-asyncio==0.25.2
pytest-cov==6.0.0
email-validator==2.2.0

View File

@@ -1,38 +1,40 @@
# services/inventory/requirements.txt
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
asyncpg==0.29.0
aiosqlite==0.19.0
alembic==1.12.1
sqlalchemy==2.0.44
psycopg2-binary==2.9.10
asyncpg==0.30.0
aiosqlite==0.20.0
alembic==1.17.0
# Data processing
pandas==2.1.3
numpy==1.25.2
pandas==2.2.3
numpy==2.2.2
# HTTP clients
httpx==0.25.2
aiofiles==23.2.0
httpx==0.28.1
aiofiles==24.1.0
# Validation and serialization
pydantic==2.5.0
pydantic-settings==2.0.3
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Authentication and security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
cryptography==44.0.0
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Message queues and Redis
aio-pika==9.3.1
redis>=4.0.0
aio-pika==9.4.3
redis==6.4.0
# Scheduling
APScheduler==3.10.4
@@ -42,4 +44,6 @@ python-barcode==0.15.1
qrcode[pil]==7.4.2
# Development
python-multipart==0.0.6
python-multipart==0.0.6
python-dateutil==2.9.0.post0
pytz==2024.2

View File

@@ -1,45 +1,46 @@
# FastAPI and dependencies
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
pydantic-settings==2.1.0
sse-starlette==1.6.5
fastapi==0.119.0
uvicorn[standard]==0.32.1
pydantic==2.12.3
pydantic-settings==2.7.1
sse-starlette==2.2.1
# Database
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.13.1
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
# Authentication & Security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6
cryptography==44.0.0
# HTTP Client
httpx==0.25.2
aiofiles==23.2.1
httpx==0.28.1
aiofiles==24.1.0
# Email
aiosmtplib==3.0.1
email-validator==2.1.0
aiosmtplib==3.0.2
email-validator==2.2.0
# Messaging & Redis
aio-pika==9.3.1
redis==5.0.1
aio-pika==9.4.3
redis==6.4.0
# Template Engine
jinja2==3.1.2
jinja2==3.1.5
# Monitoring & Logging
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Utilities
python-dateutil==2.8.2
pytz==2023.3
python-dateutil==2.9.0.post0
pytz==2024.2
# Development & Testing
pytest==7.4.3
pytest-asyncio==0.21.1
pytest-mock==3.12.0
httpx==0.25.2
pytest==8.3.4
pytest-asyncio==0.25.2
pytest-mock==3.14.0

View File

@@ -1,40 +1,44 @@
# Orders Service Dependencies
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
pydantic-settings==2.1.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
pydantic==2.12.3
pydantic-settings==2.7.1
# Database
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.13.1
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
# HTTP clients
httpx==0.25.2
httpx==0.28.1
# Redis for caching
redis==5.0.1
redis==6.4.0
# Message queuing
aio-pika==9.3.1
aio-pika==9.4.3
# Scheduling
apscheduler==3.10.4
APScheduler==3.10.4
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Date and time utilities
python-dateutil==2.8.2
python-dateutil==2.9.0.post0
pytz==2024.2
# Validation and utilities
email-validator==2.1.0
email-validator==2.2.0
# Authentication
python-jose[cryptography]==3.3.0
cryptography==44.0.0
# Development dependencies (optional)
pytest==7.4.3
pytest-asyncio==0.21.1
# Development dependencies
python-multipart==0.0.6
pytest==8.3.4
pytest-asyncio==0.25.2

View File

@@ -1,16 +1,21 @@
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
pydantic-settings==2.1.0
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.13.1
structlog==23.2.0
aiohttp==3.9.1
redis==5.0.1
celery==5.3.4
cryptography>=41.0.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
pydantic==2.12.3
pydantic-settings==2.7.1
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
structlog==25.4.0
aiohttp==3.11.10
redis==6.4.0
celery==5.4.0
cryptography==44.0.0
python-jose[cryptography]==3.3.0
httpx==0.25.2
websockets==12.0
prometheus-client==0.19.0
httpx==0.28.1
websockets==14.1
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

View File

@@ -1,38 +1,42 @@
# Production Service Dependencies
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
pydantic-settings==2.1.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
pydantic==2.12.3
pydantic-settings==2.7.1
# Database
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.13.1
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
# HTTP clients
httpx==0.25.2
httpx==0.28.1
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Message queues and Redis
aio-pika==9.3.1
redis>=4.0.0
aio-pika==9.4.3
redis==6.4.0
# Scheduling
APScheduler==3.10.4
# Date and time utilities
python-dateutil==2.8.2
python-dateutil==2.9.0.post0
pytz==2024.2
# Validation and utilities
email-validator==2.1.0
email-validator==2.2.0
# Authentication
python-jose[cryptography]==3.3.0
cryptography==44.0.0
# Development dependencies (optional)
pytest==7.4.3
pytest-asyncio==0.21.1
# Development dependencies
python-multipart==0.0.6
pytest==8.3.4
pytest-asyncio==0.25.2

View File

@@ -1,63 +1,62 @@
# Recipe Service Dependencies
# FastAPI and server
fastapi==0.104.1
uvicorn==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
python-multipart==0.0.6
# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
asyncpg==0.29.0
alembic==1.12.1
sqlalchemy==2.0.44
psycopg2-binary==2.9.10
asyncpg==0.30.0
alembic==1.17.0
# Data validation
pydantic==2.5.0
pydantic-settings==2.0.3
email-validator==2.1.0
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# HTTP requests
httpx==0.25.2
requests==2.31.0
httpx==0.28.1
requests==2.32.3
# Async support
asyncio-mqtt==0.16.1
aiofiles==23.2.1
asyncio-mqtt==0.16.2
aiofiles==24.1.0
# Messaging
aio-pika==9.3.1
aio-pika==9.4.3
# Caching (optional)
redis==5.0.1
# Caching
redis==6.4.0
python-redis-cache==0.1.0
# Monitoring and logging
structlog==23.2.0
python-json-logger==2.0.4
prometheus-client==0.19.0
structlog==25.4.0
python-json-logger==3.3.0
prometheus-client==0.23.1
# Date/time handling
python-dateutil==2.8.2
pytz==2023.3
python-dateutil==2.9.0.post0
pytz==2024.2
# Data processing
pandas==2.1.3
numpy==1.25.2
pandas==2.2.3
numpy==2.2.2
# Authentication and security
python-jose[cryptography]==3.3.0
python-multipart==0.0.6
passlib[bcrypt]==1.7.4
cryptography==44.0.0
# Environment management
python-dotenv==1.0.0
python-dotenv==1.0.1
# Testing
pytest==7.4.3
pytest-asyncio==0.21.1
httpx==0.25.2
pytest==8.3.4
pytest-asyncio==0.25.2
# Development
black==23.11.0
flake8==6.1.0
mypy==1.7.1
black==24.10.0
flake8==7.1.1
mypy==1.14.1

View File

@@ -1,40 +1,42 @@
# services/sales/requirements.txt
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
asyncpg==0.29.0
aiosqlite==0.19.0
alembic==1.12.1
sqlalchemy==2.0.44
psycopg2-binary==2.9.10
asyncpg==0.30.0
aiosqlite==0.20.0
alembic==1.17.0
# Data processing
pandas==2.1.3
numpy==1.25.2
pandas==2.2.3
numpy==2.2.2
# HTTP clients
httpx==0.25.2
aiofiles==23.2.0
httpx==0.28.1
aiofiles==24.1.0
# Validation and serialization
pydantic==2.5.0
pydantic-settings==2.0.3
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Authentication and security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
cryptography==44.0.0
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Message queues
aio-pika==9.3.1
# Note: pytest and testing dependencies are in tests/requirements.txt
aio-pika==9.4.3
# Development
python-multipart==0.0.6
redis==5.0.1
redis==6.4.0
python-dateutil==2.9.0.post0
pytz==2024.2

View File

@@ -1,42 +1,44 @@
# services/suppliers/requirements.txt
# FastAPI and web framework
fastapi==0.104.1
uvicorn[standard]==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
asyncpg==0.29.0
aiosqlite==0.19.0
alembic==1.12.1
sqlalchemy==2.0.44
psycopg2-binary==2.9.10
asyncpg==0.30.0
aiosqlite==0.20.0
alembic==1.17.0
# Data processing
pandas==2.1.3
numpy==1.25.2
pandas==2.2.3
numpy==2.2.2
# HTTP clients
httpx==0.25.2
aiofiles==23.2.0
httpx==0.28.1
aiofiles==24.1.0
# Validation and serialization
pydantic==2.5.0
pydantic-settings==2.0.3
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Authentication and security
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
cryptography==44.0.0
# Logging and monitoring
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Message queues
aio-pika==9.3.1
aio-pika==9.4.3
# Additional for supplier management
python-dateutil==2.8.2
email-validator==2.1.0
python-dateutil==2.9.0.post0
pytz==2024.2
# Development
python-multipart==0.0.6
redis==5.0.1
redis==6.4.0

View File

@@ -1,18 +1,21 @@
fastapi==0.104.1
uvicorn[standard]==0.24.0
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.12.1
psycopg2-binary==2.9.9
pydantic==2.5.0
pydantic-settings==2.1.0
httpx==0.25.2
redis==5.0.1
aio-pika==9.3.0
prometheus-client==0.17.1
python-json-logger==2.0.4
pytz==2023.3
fastapi==0.119.0
uvicorn[standard]==0.32.1
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
pydantic==2.12.3
pydantic-settings==2.7.1
httpx==0.28.1
redis==6.4.0
aio-pika==9.4.3
prometheus-client==0.23.1
python-json-logger==3.3.0
pytz==2024.2
python-logstash==0.4.8
structlog==23.2.0
structlog==25.4.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

View File

@@ -1,54 +1,54 @@
# services/training/requirements.txt
# FastAPI and server
fastapi==0.104.1
uvicorn[standard]==0.24.0
fastapi==0.119.0
uvicorn[standard]==0.32.1
python-multipart==0.0.6
# Database
sqlalchemy==2.0.23
asyncpg==0.29.0
alembic==1.12.1
psycopg2-binary==2.9.9
sqlalchemy==2.0.44
asyncpg==0.30.0
alembic==1.17.0
psycopg2-binary==2.9.10
# ML libraries
prophet==1.1.5
scikit-learn==1.3.2
pandas==2.1.3
numpy==1.24.4
joblib==1.3.2
prophet==1.1.6
scikit-learn==1.6.1
pandas==2.2.3
numpy==2.2.2
joblib==1.4.2
# HTTP client
httpx==0.25.2
httpx==0.28.1
# Validation
pydantic==2.5.0
pydantic-settings==2.1.0
pydantic==2.12.3
pydantic-settings==2.7.1
email-validator==2.2.0
# Authentication
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6
cryptography==44.0.0
# Messaging
aio-pika==9.3.1
aio-pika==9.4.3
# Monitoring and logging
structlog==23.2.0
prometheus-client==0.19.0
structlog==25.4.0
prometheus-client==0.23.1
# Development and testing
pytest==7.4.3
pytest-asyncio==0.21.1
pytest-mock==3.12.0
httpx==0.25.2
pytest-cov==4.1.0
coverage==7.3.2
psutil==5.9.0
pytest==8.3.4
pytest-asyncio==0.25.2
pytest-mock==3.14.0
pytest-cov==6.0.0
coverage==7.6.9
psutil==6.1.1
# Utilities
python-dateutil==2.8.2
pytz==2023.3
python-dateutil==2.9.0.post0
pytz==2024.2
# Hyperparameter optimization
optuna==3.4.0
redis==5.0.1
optuna==4.2.0
redis==6.4.0

View File

@@ -8,7 +8,7 @@ from typing import Optional, Dict, Any, List
from sqlalchemy import create_engine, text
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy.pool import StaticPool, QueuePool
from sqlalchemy.pool import StaticPool
from contextlib import asynccontextmanager
import structlog
import time
@@ -48,24 +48,24 @@ class DatabaseManager:
self.pool_size = pool_size
self.max_overflow = max_overflow
# Configure pool class based on database type
poolclass = QueuePool
if "sqlite" in database_url.lower():
poolclass = StaticPool
pool_size = 1
max_overflow = 0
# Create async engine with enhanced configuration
# Configure pool for async engines
# Note: SQLAlchemy 2.0 async engines automatically use AsyncAdaptedQueuePool
# We should NOT specify poolclass for async engines unless using StaticPool for SQLite
engine_config = {
"echo": echo,
"pool_pre_ping": pool_pre_ping,
"pool_recycle": pool_recycle,
"pool_size": pool_size,
"max_overflow": max_overflow,
"poolclass": poolclass,
"connect_args": {"command_timeout": connect_timeout},
**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)