Files
xiaobaifupan/next/backend/bootstrap/container.py
T

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),
)