TorbatYar/backend/services/experience/app/commands/publishing.py
Mortezakoohjani 203671a7bf feat(experience): ship Experience Platform phases 11.0-11.10
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>
2026-07-27 11:43:10 +03:30

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)