from functools import lru_cache from fastapi import Depends from src.application.abstractions import IUnitOfWork from src.application.commands import ( CreatePurchaseRequestCommand, GetOrganizationCommand, GetOrganizationMnemonicCommand, GetOrganizationSecretKeysCommand, GetOrganizationWalletBalancesCommand, GetPurchaseRequestCommand, ListOrganizationWalletsCommand, ListPurchaseRequestsCommand, UploadDocsCommand, ) from src.application.contracts import ILogger, IQueueMessanger from src.infrastructure.wallet_balances import WalletBalanceService from src.presentation.dependencies.logger import get_logger from src.presentation.dependencies.unit_of_work import get_unit_of_work from src.presentation.dependencies.messanger import get_queue_messanger def get_create_purchase_request_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), messanger: IQueueMessanger = Depends(get_queue_messanger), ) -> CreatePurchaseRequestCommand: return CreatePurchaseRequestCommand(unit_of_work=unit_of_work, logger=logger, messanger=messanger) def get_list_purchase_requests_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> ListPurchaseRequestsCommand: return ListPurchaseRequestsCommand(unit_of_work=unit_of_work, logger=logger) def get_get_purchase_request_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> GetPurchaseRequestCommand: return GetPurchaseRequestCommand(unit_of_work=unit_of_work, logger=logger) def get_get_organization_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> GetOrganizationCommand: return GetOrganizationCommand(unit_of_work=unit_of_work, logger=logger) def get_list_organization_wallets_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> ListOrganizationWalletsCommand: return ListOrganizationWalletsCommand(unit_of_work=unit_of_work, logger=logger) @lru_cache(maxsize=1) def _wallet_balance_service() -> WalletBalanceService: return WalletBalanceService() def get_get_organization_wallet_balances_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> GetOrganizationWalletBalancesCommand: return GetOrganizationWalletBalancesCommand( unit_of_work=unit_of_work, balance_service=_wallet_balance_service(), logger=logger, ) def get_get_organization_mnemonic_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> GetOrganizationMnemonicCommand: return GetOrganizationMnemonicCommand(unit_of_work=unit_of_work, logger=logger) def get_get_organization_secret_keys_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), ) -> GetOrganizationSecretKeysCommand: return GetOrganizationSecretKeysCommand(unit_of_work=unit_of_work, logger=logger) def get_upload_docs_command( logger: ILogger = Depends(get_logger), unit_of_work: IUnitOfWork = Depends(get_unit_of_work), messanger: IQueueMessanger = Depends(get_queue_messanger), ) -> UploadDocsCommand: return UploadDocsCommand(unit_of_work=unit_of_work, logger=logger, messanger=messanger)