44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
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),
|
|
)
|