from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.database import get_db from app.routers.auth import get_current_session from app.models.event_template import EventTemplate from app.schemas.event_template import ( EventTemplateCreate, EventTemplateUpdate, EventTemplateResponse, ) router = APIRouter() @router.get("/", response_model=list[EventTemplateResponse]) async def list_templates( db: AsyncSession = Depends(get_db), _: str = Depends(get_current_session), ): result = await db.execute(select(EventTemplate).order_by(EventTemplate.name)) return result.scalars().all() @router.post("/", response_model=EventTemplateResponse, status_code=status.HTTP_201_CREATED) async def create_template( payload: EventTemplateCreate, db: AsyncSession = Depends(get_db), _: str = Depends(get_current_session), ): template = EventTemplate(**payload.model_dump()) db.add(template) await db.commit() await db.refresh(template) return template @router.put("/{template_id}", response_model=EventTemplateResponse) async def update_template( template_id: int, payload: EventTemplateUpdate, db: AsyncSession = Depends(get_db), _: str = Depends(get_current_session), ): result = await db.execute( select(EventTemplate).where(EventTemplate.id == template_id) ) template = result.scalar_one_or_none() if template is None: raise HTTPException(status_code=404, detail="Template not found") for field, value in payload.model_dump(exclude_unset=True).items(): setattr(template, field, value) await db.commit() await db.refresh(template) return template @router.delete("/{template_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_template( template_id: int, db: AsyncSession = Depends(get_db), _: str = Depends(get_current_session), ): result = await db.execute( select(EventTemplate).where(EventTemplate.id == template_id) ) template = result.scalar_one_or_none() if template is None: raise HTTPException(status_code=404, detail="Template not found") await db.delete(template) await db.commit()