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: 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
command: > command: >
redis-server redis-server
--appendonly yes --appendonly yes
--requirepass ${REDIS_PASSWORD} --requirepass ${REDIS_PASSWORD}
--maxmemory ${REDIS_MAX_MEMORY:-512mb} --maxmemory ${REDIS_MAX_MEMORY:-512mb}
--databases 16 --databases 16
@@ -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:

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"> <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>

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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",

View File

@@ -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

View File

@@ -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"

View File

@@ -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>

View File

@@ -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',

View File

@@ -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">

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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'

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
@@ -42,4 +44,6 @@ python-barcode==0.15.1
qrcode[pil]==7.4.2 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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,24 +48,24 @@ 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)