Implement governed hybrid campaign delivery

This commit is contained in:
2026-08-02 13:58:37 +02:00
parent b38597f2be
commit 7733265cc8
40 changed files with 2531 additions and 122 deletions
@@ -65,6 +65,7 @@ from govoplan_campaign.backend.campaign.postbox_targets import (
from govoplan_campaign.backend.integrations import (
PostboxDeliveryUnavailable,
postbox_integration,
templates_integration,
)
from govoplan_core.db.session import get_session
from govoplan_core.core.distribution_lists import (
@@ -755,6 +756,29 @@ def campaign_postbox_catalog(
)
@router.get("/{campaign_id}/print-templates")
def campaign_print_templates(
campaign_id: str,
query: str = Query(default="", min_length=0, max_length=200),
session: Session = Depends(get_session),
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:read")),
):
_get_campaign_for_principal(session, campaign_id, principal)
integration = templates_integration()
if not integration.available:
return {"available": False, "templates": []}
templates = integration.list_templates(
session,
principal,
query=query,
limit=250,
)
return {
"available": True,
"templates": [dataclasses.asdict(template) for template in templates],
}
@router.post(
"/{campaign_id}/recipient-address-sources/snapshot",
response_model=CampaignRecipientAddressSourceSnapshotResponse,