from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from app.db.base import get_db from app.core.deps import get_current_user from app.models.user import User from app.models.template import Template from app.schemas.template import TemplateCreate, TemplateUpdate, TemplateResponse router = APIRouter() @router.post("", response_model=TemplateResponse, status_code=status.HTTP_201_CREATED) def create_template( template: TemplateCreate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): db_template = Template( user_id=current_user.id, name=template.name, language=template.language, body_text=template.body_text, is_whatsapp_template=template.is_whatsapp_template, provider_template_name=template.provider_template_name ) db.add(db_template) db.commit() db.refresh(db_template) return db_template @router.get("", response_model=List[TemplateResponse]) def list_templates( current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): return db.query(Template).filter(Template.user_id == current_user.id).all() @router.get("/{template_id}", response_model=TemplateResponse) def get_template( template_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): template = db.query(Template).filter( Template.id == template_id, Template.user_id == current_user.id ).first() if not template: raise HTTPException(status_code=404, detail="Template not found") return template @router.put("/{template_id}", response_model=TemplateResponse) def update_template( template_id: int, template_update: TemplateUpdate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): template = db.query(Template).filter( Template.id == template_id, Template.user_id == current_user.id ).first() if not template: raise HTTPException(status_code=404, detail="Template not found") update_data = template_update.dict(exclude_unset=True) for field, value in update_data.items(): setattr(template, field, value) db.commit() db.refresh(template) return template @router.delete("/{template_id}", status_code=status.HTTP_204_NO_CONTENT) def delete_template( template_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): template = db.query(Template).filter( Template.id == template_id, Template.user_id == current_user.id ).first() if not template: raise HTTPException(status_code=404, detail="Template not found") db.delete(template) db.commit() return None