from typing import Annotated, Any from anydi import Provide from fansifter_common.api.schemas import response_errors from fastapi import APIRouter, Depends, Path from email_campaigns.api import auth, schemas from email_campaigns.automated.exceptions import SourceCampaignNotFoundError from email_campaigns.automated.handlers import ( GetSourceCampaignAutomatedEmailsHandler, GetSourceCampaignAutomatedEmailsRequest, GetSourceCampaignsHandler, GetSourceCampaignsRequest, ) router = APIRouter(tags=["Source Campaigns"]) @router.post( "/source-campaigns/list", operation_id="getSourceCampaigns", response_model=schemas.LimitOffsetPage[schemas.SourceCampaign], response_model_by_alias=True, ) def get_source_campaigns( identity_id: Annotated[str, Depends(auth.get_identity_id)], data: schemas.GetSourceCampaignsInput, handler: Provide[GetSourceCampaignsHandler], ) -> Any: order_by = data.order_by or GetSourceCampaignsRequest.DEFAULT_ORDER_BY limit = data.limit or GetSourceCampaignsRequest.DEFAULT_LIMIT offset = data.offset or GetSourceCampaignsRequest.DEFAULT_OFFSET response = handler.handle( GetSourceCampaignsRequest( identity_id=identity_id, search=data.search, vendor_id=data.vendor_id, subaccount_id=data.subaccount_id, current_automated_email_id=data.current_automated_email_id, status=data.status, email_type=data.email_type, order_by=order_by, limit=limit, offset=offset, ) ) return schemas.LimitOffsetPage( total=response.total, items=response.items, limit=limit, offset=offset, ) @router.get( "/source-campaigns/{source}/{campaignId}/automated-emails", operation_id="getSourceCampaignAutomatedEmails", tags=["internal"], response_model=schemas.GetSourceCampaignAutomatedEmailsResponse, response_model_by_alias=True, responses=response_errors(SourceCampaignNotFoundError), dependencies=[Depends(auth.validate_fan_response_jwt)], ) def get_source_campaign_automated_emails( source: str, campaign_id: Annotated[str, Path(alias="campaignId")], handler: Provide[GetSourceCampaignAutomatedEmailsHandler], ) -> Any: response = handler.handle( GetSourceCampaignAutomatedEmailsRequest(source=source, campaign_id=campaign_id) ) return { "is_participation_email_automated": any( not i.subscription_only for i in response.items ), "is_subscription_email_automated": any( i.subscription_only for i in response.items ), "items": response.items, }