""" Router template messaggi (Feature 1). Endpoint: GET /templates – lista template del tenant POST /templates – crea template (admin) GET /templates/{id} – dettaglio template PUT /templates/{id} – aggiorna template (admin) DELETE /templates/{id} – elimina template (admin) """ import uuid from fastapi import APIRouter, Query, status from app.dependencies import AdminUser, CurrentUser, DB from app.schemas.template import TemplateCreate, TemplateListResponse, TemplateResponse, TemplateUpdate from app.services.template_service import TemplateService router = APIRouter(tags=["Templates"]) @router.get("/templates", response_model=TemplateListResponse) async def list_templates( current_user: CurrentUser, db: DB, q: str | None = Query(None, description="Filtro per nome"), ) -> TemplateListResponse: """Elenca i template del tenant corrente.""" svc = TemplateService(db) items, total = await svc.list_templates(current_user.tenant_id, q=q) return TemplateListResponse( items=[TemplateResponse.model_validate(t) for t in items], total=total, ) @router.post("/templates", response_model=TemplateResponse, status_code=status.HTTP_201_CREATED) async def create_template( data: TemplateCreate, current_user: AdminUser, db: DB, ) -> TemplateResponse: """Crea un nuovo template (solo admin).""" svc = TemplateService(db) template = await svc.create_template(current_user.tenant_id, data, created_by=current_user.id) return TemplateResponse.model_validate(template) @router.get("/templates/{template_id}", response_model=TemplateResponse) async def get_template( template_id: uuid.UUID, current_user: CurrentUser, db: DB, ) -> TemplateResponse: """Restituisce il dettaglio di un template.""" svc = TemplateService(db) template = await svc.get_template(current_user.tenant_id, template_id) return TemplateResponse.model_validate(template) @router.put("/templates/{template_id}", response_model=TemplateResponse) async def update_template( template_id: uuid.UUID, data: TemplateUpdate, current_user: AdminUser, db: DB, ) -> TemplateResponse: """Aggiorna un template esistente (solo admin).""" svc = TemplateService(db) template = await svc.update_template(current_user.tenant_id, template_id, data) return TemplateResponse.model_validate(template) @router.delete("/templates/{template_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_template( template_id: uuid.UUID, current_user: AdminUser, db: DB, ) -> None: """Elimina un template (solo admin).""" svc = TemplateService(db) await svc.delete_template(current_user.tenant_id, template_id)