import logging from typing import TYPE_CHECKING from src import domain, dto if TYPE_CHECKING: from .. import Usecase log = logging.getLogger(__name__) async def get_placement(self: 'Usecase', input: dto.GetPlacementInput) -> dto.PlacementOutput: async with self.database.transaction(): placement = await self.database.get_placement(input.user_id, input.placement_id) if not placement: log.warning('Placement %s not found for user %s', input.placement_id, input.user_id) raise domain.PlacementNotFound(input.placement_id) return dto.PlacementOutput( id=placement.id, target_channel_id=placement.target_channel_id, target_channel_title=placement.target_channel.title, external_channel_id=placement.external_channel_id, external_channel_title=placement.external_channel.title, creative_id=placement.creative_id, creative_name=placement.creative.name, placement_date=placement.placement_date, cost=placement.cost, comment=placement.comment, ad_post_url=placement.ad_post_url, invite_link_type=placement.invite_link_type, invite_link=placement.invite_link, status=placement.status, subscriptions_count=placement.subscriptions_count, views_count=placement.views_count, views_availability=placement.views_availability, last_views_fetch_at=placement.last_views_fetch_at, created_at=placement.created_at, )