TorbatYar/backend/services/communication/app/api/v1/templates.py
Mortezakoohjani e41ecfad4c Sync platform docs, infra, and module services with Accounting integration.
Include Loyalty/Communication/Sports Center backends and registry updates alongside production nginx and compose wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-25 22:35:23 +03:30

97 lines
3.0 KiB
Python

from uuid import UUID
from fastapi import APIRouter, Depends
from app.api.deps import AsyncSession, CurrentUser, get_current_user, get_db, require_tenant
from app.schemas.common import (
TemplateCreate,
TemplateOut,
TemplatePreviewRequest,
TemplatePreviewResponse,
)
from app.services.template_service import TemplateService
router = APIRouter()
@router.get("", response_model=list[TemplateOut])
async def list_templates(
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
_: CurrentUser = Depends(get_current_user),
):
return await TemplateService(session).list(tenant_id)
@router.post("", response_model=TemplateOut, status_code=201)
async def create_template(
body: TemplateCreate,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
user: CurrentUser = Depends(get_current_user),
):
return await TemplateService(session).create(
tenant_id, body.model_dump(), actor_id=user.user_id
)
@router.get("/{template_id}", response_model=TemplateOut)
async def get_template(
template_id: UUID,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
_: CurrentUser = Depends(get_current_user),
):
return await TemplateService(session).get(tenant_id, template_id)
@router.post("/{template_id}/submit", response_model=TemplateOut)
async def submit_template(
template_id: UUID,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
user: CurrentUser = Depends(get_current_user),
):
return await TemplateService(session).submit_for_approval(
tenant_id, template_id, actor_id=user.user_id
)
@router.post("/{template_id}/approve", response_model=TemplateOut)
async def approve_template(
template_id: UUID,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
user: CurrentUser = Depends(get_current_user),
):
return await TemplateService(session).approve(
tenant_id, template_id, actor_id=user.user_id
)
@router.post("/{template_id}/reject", response_model=TemplateOut)
async def reject_template(
template_id: UUID,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
user: CurrentUser = Depends(get_current_user),
reason: str | None = None,
):
return await TemplateService(session).reject(
tenant_id, template_id, reason=reason, actor_id=user.user_id
)
@router.post("/{template_id}/preview", response_model=TemplatePreviewResponse)
async def preview_template(
template_id: UUID,
body: TemplatePreviewRequest,
tenant_id: UUID = Depends(require_tenant),
session: AsyncSession = Depends(get_db),
_: CurrentUser = Depends(get_current_user),
):
result = await TemplateService(session).preview(
tenant_id, template_id, body.variables
)
return TemplatePreviewResponse(**result)