from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from domain.repositories.device_repository import DeviceRepository
from domain.repositories.provision_repository import ProvisionRepository
from domain.auth.repositories.user_repository import UserRepository
from domain.services.xml_serializer import XmlSerializer
from domain.auth.entities.ticket import TicketType
from application.handlers.tickets.base import BaseTicketHandler
from application.handlers.tickets.account_unlock import AccountUnlockHandler
from application.handlers.tickets.privilege_upgrade import PrivilegeUpgradeHandler
from application.use_cases.tvip_provision.handle_provision_request import HandleProvisionRequestUseCase
from application.use_cases.devices_management.get_device_config import GetDeviceConfigUseCase
from application.use_cases.devices_management.update_device_config import UpdateDeviceConfigUseCase
from application.use_cases.devices_management.replace_device_config import ReplaceDeviceConfigUseCase
from application.use_cases.devices_management.reset_device_config import ResetDeviceConfigUseCase
from application.use_cases.devices_management.get_devices_list import GetDevicesListUseCase
from application.use_cases.default_config_management.get_default_config import GetDefaultConfigUseCase
from application.use_cases.default_config_management.update_default_config import UpdateDefaultConfigUseCase
from application.use_cases.default_config_management.replace_default_config import ReplaceDefaultConfigUseCase
from application.use_cases.auth.login_user import LoginUserUseCase
from application.use_cases.auth.register_user import RegisterUserUseCase
from application.use_cases.auth.verify_token import VerifyTokenUseCase
from application.use_cases.users_management.change_password import ChangePasswordUseCase
from application.use_cases.users_management.password_recovery import PasswordRecoveryUseCase
from application.use_cases.tickets.create_ticket import CreateTicketUseCase
from application.use_cases.tickets.get_in_progress_ticket import GetInProgressTicketUseCase
from application.use_cases.tickets.approve_ticket import ApproveTicketUseCase
from application.use_cases.tickets.reject_ticket import RejectTicketUseCase
from infrastructure.database.database import get_db
from infrastructure.repositories.sql_device_repository import SQLDeviceRepository
from infrastructure.repositories.sql_provision_repository import SQLProvisionRepository
from infrastructure.serializers.xmltodict_serializer import XmlToDictSerializer
from infrastructure.auth.repositories.sql_user_repository import SQLUserRepository
from infrastructure.auth.repositories.sql_ticket_repository import SQLTicketRepository
from infrastructure.auth.jwt_provider import JWTProvider
from infrastructure.auth.password_hasher import PasswordHasher
from config import settings
JWT_SECRET_KEY = settings.jwt_secret_key
JWT_ACCESS_TOKEN_EXPIRE_MINUTES = settings.jwt_access_token_expire_minutes
JWT_ALGORITHM = settings.jwt_algorithm
[документация]
def get_device_repository(db: AsyncSession = Depends(get_db)) -> DeviceRepository:
return SQLDeviceRepository(db_session=db)
[документация]
def get_provision_repository(db: AsyncSession = Depends(get_db)) -> ProvisionRepository:
return SQLProvisionRepository(db_session=db)
[документация]
def get_user_repository(db: AsyncSession = Depends(get_db)) -> UserRepository:
return SQLUserRepository(db_session=db)
[документация]
def get_ticket_repository(db: AsyncSession = Depends(get_db)) -> SQLTicketRepository:
return SQLTicketRepository(db_session=db)
[документация]
def get_xml_serializer() -> XmlSerializer:
return XmlToDictSerializer()
[документация]
def get_jwt_provider() -> JWTProvider:
return JWTProvider(
secret_key=JWT_SECRET_KEY,
access_token_expire_minutes=JWT_ACCESS_TOKEN_EXPIRE_MINUTES,
algorithm=JWT_ALGORITHM
)
[документация]
def get_password_hasher() -> PasswordHasher:
return PasswordHasher()
[документация]
def get_handle_provision_use_case(
device_repo: DeviceRepository = Depends(get_device_repository),
provision_repo: ProvisionRepository = Depends(get_provision_repository),
xml_serializer: XmlSerializer = Depends(get_xml_serializer)
) -> HandleProvisionRequestUseCase:
return HandleProvisionRequestUseCase(
device_repo=device_repo,
provision_repo=provision_repo,
xml_serializer=xml_serializer
)
[документация]
def get_device_config_use_case(
device_repo: DeviceRepository = Depends(get_device_repository),
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> GetDeviceConfigUseCase:
return GetDeviceConfigUseCase(
device_repo=device_repo,
provision_repo=provision_repo
)
[документация]
def update_device_config_use_case(
device_repo: DeviceRepository = Depends(get_device_repository),
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> UpdateDeviceConfigUseCase:
return UpdateDeviceConfigUseCase(
device_repo=device_repo,
provision_repo=provision_repo
)
[документация]
def reset_device_config_use_case(
device_repo: DeviceRepository = Depends(get_device_repository),
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> ResetDeviceConfigUseCase:
return ResetDeviceConfigUseCase(
device_repo=device_repo,
provision_repo=provision_repo
)
[документация]
def get_devices_list_use_case(
device_repo: DeviceRepository = Depends(get_device_repository)
) -> GetDevicesListUseCase:
return GetDevicesListUseCase(
device_repo=device_repo
)
[документация]
def get_default_config_use_case(
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> GetDefaultConfigUseCase:
return GetDefaultConfigUseCase(
provision_repo=provision_repo
)
[документация]
def update_default_config_use_case(
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> UpdateDefaultConfigUseCase:
return UpdateDefaultConfigUseCase(
provision_repo=provision_repo
)
[документация]
def replace_device_config_use_case(
device_repo: DeviceRepository = Depends(get_device_repository),
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> ReplaceDeviceConfigUseCase:
return ReplaceDeviceConfigUseCase(
device_repo=device_repo,
provision_repo=provision_repo
)
[документация]
def replace_default_config_use_case(
provision_repo: ProvisionRepository = Depends(get_provision_repository)
) -> ReplaceDefaultConfigUseCase:
return ReplaceDefaultConfigUseCase(
provision_repo=provision_repo
)
[документация]
def get_login_user_use_case(
user_repo: UserRepository = Depends(get_user_repository),
jwt_provider: JWTProvider = Depends(get_jwt_provider),
password_hasher: PasswordHasher = Depends(get_password_hasher)
) -> LoginUserUseCase:
return LoginUserUseCase(
user_repo=user_repo,
jwt_provider=jwt_provider,
password_hasher=password_hasher
)
[документация]
def get_register_user_use_case(
user_repo: UserRepository = Depends(get_user_repository),
password_hasher: PasswordHasher = Depends(get_password_hasher)
) -> RegisterUserUseCase:
return RegisterUserUseCase(
user_repo=user_repo,
password_hasher=password_hasher
)
[документация]
def get_change_password_use_case(
user_repo: UserRepository = Depends(get_user_repository),
jwt_provider: JWTProvider = Depends(get_jwt_provider),
password_hasher: PasswordHasher = Depends(get_password_hasher)
) -> ChangePasswordUseCase:
return ChangePasswordUseCase(
user_repo=user_repo,
jwt_provider=jwt_provider,
password_hasher=password_hasher
)
[документация]
def get_password_recovery_use_case(
ticket_repo: SQLTicketRepository = Depends(get_ticket_repository),
user_repo: UserRepository = Depends(get_user_repository),
password_hasher: PasswordHasher = Depends(get_password_hasher)
) -> PasswordRecoveryUseCase:
return PasswordRecoveryUseCase(
ticket_repo=ticket_repo,
user_repo=user_repo,
password_hasher=password_hasher
)
[документация]
def get_verify_token_use_case(
user_repo: UserRepository = Depends(get_user_repository),
jwt_provider: JWTProvider = Depends(get_jwt_provider)
) -> VerifyTokenUseCase:
return VerifyTokenUseCase(
user_repo=user_repo,
jwt_provider=jwt_provider
)
[документация]
def get_create_ticket_use_case(
ticket_repo: SQLTicketRepository = Depends(get_ticket_repository),
user_repo: UserRepository = Depends(get_user_repository)
) -> CreateTicketUseCase:
return CreateTicketUseCase(
ticket_repo=ticket_repo,
user_repo=user_repo
)
[документация]
def get_in_progress_ticket_use_case(
ticket_repo: SQLTicketRepository = Depends(get_ticket_repository)
) -> GetInProgressTicketUseCase:
return GetInProgressTicketUseCase(
ticket_repo=ticket_repo
)
[документация]
def get_type_ticket_handler() -> dict[TicketType, BaseTicketHandler]:
return {
TicketType.PRIVILEGE_UPGRADE: PrivilegeUpgradeHandler(),
TicketType.ACCOUNT_UNLOCK: AccountUnlockHandler()
}
[документация]
def get_approve_ticket_use_case(
ticket_repo: SQLTicketRepository = Depends(get_ticket_repository),
user_repo: UserRepository = Depends(get_user_repository),
ticket_handler: dict[TicketType, BaseTicketHandler] = Depends(get_type_ticket_handler)
) -> ApproveTicketUseCase:
return ApproveTicketUseCase(
ticket_repo=ticket_repo,
user_repo=user_repo,
ticket_handler=ticket_handler
)
[документация]
def get_reject_ticket_use_case(
ticket_repo: SQLTicketRepository = Depends(get_ticket_repository)
) -> RejectTicketUseCase:
return RejectTicketUseCase(
ticket_repo=ticket_repo
)