from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from database import get_db from schemas.template_schemas import ( TemplateCreate, TemplateSchema, TemplateFieldCreate, TemplateFieldSchema, TemplateFieldMappingCreate, TemplateFieldMappingSchema ) from services.template_service import TemplateService router = APIRouter(prefix="/api/templates", tags=["Templates"]) @router.post("", response_model=TemplateSchema, status_code=status.HTTP_201_CREATED) def create_template(template_data: TemplateCreate, db: Session = Depends(get_db)): service = TemplateService(db) return service.create_template(template_data) @router.get("", response_model=List[TemplateSchema]) def get_templates(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): service = TemplateService(db) return service.get_all_templates(skip, limit) @router.get("/{template_id}", response_model=TemplateSchema) def get_template(template_id: int, db: Session = Depends(get_db)): service = TemplateService(db) template = service.get_template(template_id) if not template: raise HTTPException(status_code=404, detail="Template not found") return template @router.delete("/{template_id}", status_code=status.HTTP_204_NO_CONTENT) def delete_template(template_id: int, db: Session = Depends(get_db)): service = TemplateService(db) if not service.delete_template(template_id): raise HTTPException(status_code=404, detail="Template not found") return None @router.post("/{template_id}/fields", response_model=TemplateFieldSchema, status_code=status.HTTP_201_CREATED) def add_template_field(template_id: int, field_data: TemplateFieldCreate, db: Session = Depends(get_db)): service = TemplateService(db) # Check if template exists if not service.get_template(template_id): raise HTTPException(status_code=404, detail="Template not found") return service.add_template_field(template_id, field_data) @router.post("/{template_id}/mappings/save", response_model=List[TemplateFieldMappingSchema]) def save_mappings(template_id: int, mappings: List[TemplateFieldMappingCreate], db: Session = Depends(get_db)): service = TemplateService(db) if not service.get_template(template_id): raise HTTPException(status_code=404, detail="Template not found") return service.save_mapping(template_id, mappings)