from __future__ import annotations from dataclasses import dataclass from backend.bootstrap.settings import Settings from backend.database.connection import Database from backend.database.repositories.status import DatabaseStatusRepository from backend.features.accounts.credentials import SystemCredentialService from backend.features.accounts.model_pool import ModelPoolRepository, ModelPoolService from backend.features.accounts.repository import AccountRepository, SystemCredentialRepository from backend.features.accounts.service import ( AccountService, MembershipService, ) from backend.security import PasswordHasher, load_or_create_cipher @dataclass(frozen=True, slots=True) class ApplicationContainer: settings: Settings database: Database database_status: DatabaseStatusRepository accounts: AccountService memberships: MembershipService system_credentials: SystemCredentialService model_pool: ModelPoolService def build_container(settings: Settings) -> ApplicationContainer: database = Database(settings.database_path) account_repository = AccountRepository() credential_repository = SystemCredentialRepository() model_pool_repository = ModelPoolRepository() cipher = load_or_create_cipher(settings) return ApplicationContainer( settings=settings, database=database, database_status=DatabaseStatusRepository(database), accounts=AccountService(database, account_repository, PasswordHasher(), cipher), memberships=MembershipService(database, account_repository), system_credentials=SystemCredentialService(database, credential_repository, cipher), model_pool=ModelPoolService(database, model_pool_repository, cipher), )