Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions backend/.env.test
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ REDIS_DECODE_RESPONSES=true

# Kafka - use localhost for tests
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
KAFKA_TOPIC_PREFIX=test.
SCHEMA_REGISTRY_URL=http://localhost:8081

# Security
Expand All @@ -31,9 +32,6 @@ CORS_ALLOWED_ORIGINS=["http://localhost:3000","https://localhost:3000"]
# Features
RATE_LIMIT_ENABLED=true
ENABLE_TRACING=false
OTEL_SDK_DISABLED=true
OTEL_METRICS_EXPORTER=none
OTEL_TRACES_EXPORTER=none

# Development
DEVELOPMENT_MODE=false
Expand Down
116 changes: 113 additions & 3 deletions backend/app/core/container.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,32 @@
AuthProvider,
BusinessServicesProvider,
ConnectionProvider,
CoordinatorProvider,
CoreServicesProvider,
DatabaseProvider,
DLQProcessorProvider,
EventProvider,
EventReplayProvider,
K8sWorkerProvider,
KubernetesProvider,
LoggingProvider,
MessagingProvider,
PodMonitorProvider,
RedisProvider,
ResultProcessorProvider,
SagaOrchestratorProvider,
SettingsProvider,
UserServicesProvider,
)
from app.settings import Settings


def create_app_container() -> AsyncContainer:
def create_app_container(settings: Settings) -> AsyncContainer:
"""
Create the application DI container.

Args:
settings: Application settings (injected via from_context).
"""
return make_async_container(
SettingsProvider(),
Expand All @@ -36,13 +47,16 @@ def create_app_container() -> AsyncContainer:
AdminServicesProvider(),
BusinessServicesProvider(),
FastapiProvider(),
context={Settings: settings},
)


def create_result_processor_container() -> AsyncContainer:
def create_result_processor_container(settings: Settings) -> AsyncContainer:
"""
Create a minimal DI container for the ResultProcessor worker.
Includes only settings, database, event/kafka, and required repositories.

Args:
settings: Application settings (injected via from_context).
"""
return make_async_container(
SettingsProvider(),
Expand All @@ -54,4 +68,100 @@ def create_result_processor_container() -> AsyncContainer:
EventProvider(),
MessagingProvider(),
ResultProcessorProvider(),
context={Settings: settings},
)


def create_coordinator_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the ExecutionCoordinator worker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
RedisProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
CoordinatorProvider(),
context={Settings: settings},
)


def create_k8s_worker_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the KubernetesWorker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
RedisProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
KubernetesProvider(),
K8sWorkerProvider(),
context={Settings: settings},
)


def create_pod_monitor_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the PodMonitor worker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
KubernetesProvider(),
PodMonitorProvider(),
context={Settings: settings},
)


def create_saga_orchestrator_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the SagaOrchestrator worker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
RedisProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
SagaOrchestratorProvider(),
context={Settings: settings},
)


def create_event_replay_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the EventReplay worker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
EventReplayProvider(),
context={Settings: settings},
)


def create_dlq_processor_container(settings: Settings) -> AsyncContainer:
"""Create DI container for the DLQ processor worker."""
return make_async_container(
SettingsProvider(),
LoggingProvider(),
DatabaseProvider(),
CoreServicesProvider(),
MessagingProvider(),
EventProvider(),
ConnectionProvider(),
DLQProcessorProvider(),
context={Settings: settings},
)
Loading
Loading