Add the experience service with sites through analytics/AI hooks, migrations through 0011, and phase docs/manifests marking the track complete. Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
3.2 KiB
Python
65 lines
3.2 KiB
Python
"""Publishing, SEO and PWA command handlers — Phase 11.7."""
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.schemas.publishing import (
|
|
DomainEdgeBindingCreate,
|
|
DomainEdgeBindingUpdate,
|
|
PublishReleaseCreate,
|
|
PublishReleaseUpdate,
|
|
PwaManifestUpdate,
|
|
PwaManifestUpsert,
|
|
RobotsShellUpdate,
|
|
RobotsShellUpsert,
|
|
SeoMetadataUpdate,
|
|
SeoMetadataUpsert,
|
|
SitemapShellUpdate,
|
|
SitemapShellUpsert,
|
|
)
|
|
from app.services.publishing import ExperiencePublishingService
|
|
from shared.security import CurrentUser
|
|
|
|
|
|
class PublishingCommands:
|
|
def __init__(self, session: AsyncSession) -> None:
|
|
self.service = ExperiencePublishingService(session)
|
|
|
|
async def create_publish_release(self, tenant_id: UUID, body: PublishReleaseCreate, *, actor: CurrentUser | None):
|
|
return await self.service.create_publish_release(tenant_id, body, actor=actor)
|
|
|
|
async def update_publish_release(self, tenant_id: UUID, entity_id: UUID, body: PublishReleaseUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_publish_release(tenant_id, entity_id, body, actor=actor)
|
|
|
|
async def create_domain_edge_binding(self, tenant_id: UUID, body: DomainEdgeBindingCreate, *, actor: CurrentUser | None):
|
|
return await self.service.create_domain_edge_binding(tenant_id, body, actor=actor)
|
|
|
|
async def update_domain_edge_binding(self, tenant_id: UUID, entity_id: UUID, body: DomainEdgeBindingUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_domain_edge_binding(tenant_id, entity_id, body, actor=actor)
|
|
|
|
async def upsert_seo(self, tenant_id: UUID, body: SeoMetadataUpsert, *, actor: CurrentUser | None):
|
|
return await self.service.upsert_seo(tenant_id, body, actor=actor)
|
|
|
|
async def update_seo(self, tenant_id: UUID, entity_id: UUID, body: SeoMetadataUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_seo(tenant_id, entity_id, body, actor=actor)
|
|
|
|
async def upsert_sitemap(self, tenant_id: UUID, body: SitemapShellUpsert, *, actor: CurrentUser | None):
|
|
return await self.service.upsert_sitemap(tenant_id, body, actor=actor)
|
|
|
|
async def update_sitemap(self, tenant_id: UUID, entity_id: UUID, body: SitemapShellUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_sitemap(tenant_id, entity_id, body, actor=actor)
|
|
|
|
async def upsert_robots(self, tenant_id: UUID, body: RobotsShellUpsert, *, actor: CurrentUser | None):
|
|
return await self.service.upsert_robots(tenant_id, body, actor=actor)
|
|
|
|
async def update_robots(self, tenant_id: UUID, entity_id: UUID, body: RobotsShellUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_robots(tenant_id, entity_id, body, actor=actor)
|
|
|
|
async def upsert_pwa(self, tenant_id: UUID, body: PwaManifestUpsert, *, actor: CurrentUser | None):
|
|
return await self.service.upsert_pwa(tenant_id, body, actor=actor)
|
|
|
|
async def update_pwa(self, tenant_id: UUID, entity_id: UUID, body: PwaManifestUpdate, *, actor: CurrentUser | None):
|
|
return await self.service.update_pwa(tenant_id, entity_id, body, actor=actor)
|