from dataclasses import dataclass from campaigns.auth.dtos import User from campaigns.connectors.db import Database, session_context from campaigns.core.handler import Handler from campaigns.meta.models import FacebookPage from campaigns.meta.repositories import FacebookPageRepository @dataclass(frozen=True) class GetFacebookUserPagesRequest: user: User @dataclass class GetFacebookUserPagesHandler( Handler[GetFacebookUserPagesRequest, list[FacebookPage]], ): db: Database facebook_page_repository: FacebookPageRepository @session_context(in_transaction=False) async def handle(self, request: GetFacebookUserPagesRequest) -> list[FacebookPage]: pages = await self.facebook_page_repository.find_by_identity_id( identity_id=request.user.id.identity_id ) return sorted(pages, key=lambda page: page.name)