from collections.abc import Sequence from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthAccountFilterRequest from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from dmp.rosters.models import CustomList from dmp.rosters.repositories import CustomListRepository @dataclass(kw_only=True) class GetCustomListsRequest(AuthAccountFilterRequest): custom_list_ids: list[str] @singleton class GetCustomListsHandler: permission = Permission("roster", "view") def __init__( self, *, auth_service: AuthService, custom_list_repository: CustomListRepository, ) -> None: self.auth_service = auth_service self.custom_list_repository = custom_list_repository def handle(self, request: GetCustomListsRequest) -> Sequence[CustomList]: account_access = self.auth_service.authorize_for_permission( request.identity_id, permission=self.permission, ) vendor_ids = account_access.filter_vendor_ids(request.vendor_id) subaccount_ids = account_access.filter_subaccount_ids(request.subaccount_id) return self.custom_list_repository.find_allowed( vendor_ids=vendor_ids, subaccount_ids=subaccount_ids, custom_list_ids=request.custom_list_ids, )