from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from .. import models, schemas from ..database import get_db import datetime router = APIRouter(tags=["diagrams"]) @router.get("/", response_model=List[schemas.DiagramSummary]) def list_diagrams(db: Session = Depends(get_db)): return db.query(models.Diagram).order_by(models.Diagram.updated_at.desc()).all() @router.post("/", response_model=schemas.DiagramSummary) def create_diagram(diagram: schemas.DiagramCreate, db: Session = Depends(get_db)): db_diagram = models.Diagram(**diagram.model_dump()) db.add(db_diagram) db.commit() db.refresh(db_diagram) return db_diagram @router.get("/{diagram_id}", response_model=schemas.DiagramFull) def get_diagram(diagram_id: int, db: Session = Depends(get_db)): diagram = db.query(models.Diagram).filter(models.Diagram.id == diagram_id).first() if not diagram: raise HTTPException(status_code=404, detail="Diagram not found") return diagram @router.patch("/{diagram_id}", response_model=schemas.DiagramSummary) def update_diagram(diagram_id: int, update: schemas.DiagramUpdate, db: Session = Depends(get_db)): diagram = db.query(models.Diagram).filter(models.Diagram.id == diagram_id).first() if not diagram: raise HTTPException(status_code=404, detail="Diagram not found") for key, value in update.model_dump(exclude_none=True).items(): setattr(diagram, key, value) diagram.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(diagram) return diagram @router.delete("/{diagram_id}") def delete_diagram(diagram_id: int, db: Session = Depends(get_db)): diagram = db.query(models.Diagram).filter(models.Diagram.id == diagram_id).first() if not diagram: raise HTTPException(status_code=404, detail="Diagram not found") db.delete(diagram) db.commit() return {"ok": True}