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.services import CampaignImageService, CampaignService @dataclass(frozen=True) class DeleteCampaignImageRequest: user: User campaign_id: str image_id: str @dataclass class DeleteCampaignImageHandler(Handler[DeleteCampaignImageRequest, None]): db: Database campaign_service: CampaignService campaign_image_service: CampaignImageService @session_context(in_transaction=True) async def handle(self, request: DeleteCampaignImageRequest) -> None: campaign = await self.campaign_service.get_user_campaign( user=request.user, campaign_id=request.campaign_id ) image = campaign.get_image(request.image_id) await self.campaign_image_service.delete_image(image)