from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from .. import models, schemas from ..database import get_db import datetime router = APIRouter(tags=["wires"]) @router.post("/", response_model=schemas.Wire) def create_wire(wire: schemas.WireCreate, db: Session = Depends(get_db)): diagram = db.query(models.Diagram).filter(models.Diagram.id == wire.diagram_id).first() if not diagram: raise HTTPException(status_code=404, detail="Diagram not found") db_wire = models.Wire(**wire.model_dump()) db.add(db_wire) diagram.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(db_wire) return db_wire @router.patch("/{wire_id}", response_model=schemas.Wire) def update_wire(wire_id: int, update: schemas.WireUpdate, db: Session = Depends(get_db)): wire = db.query(models.Wire).filter(models.Wire.id == wire_id).first() if not wire: raise HTTPException(status_code=404, detail="Wire not found") for key, value in update.model_dump(exclude_unset=True).items(): setattr(wire, key, value) diagram = db.query(models.Diagram).filter(models.Diagram.id == wire.diagram_id).first() if diagram: diagram.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(wire) return wire @router.delete("/{wire_id}") def delete_wire(wire_id: int, db: Session = Depends(get_db)): wire = db.query(models.Wire).filter(models.Wire.id == wire_id).first() if not wire: raise HTTPException(status_code=404, detail="Wire not found") db.delete(wire) db.commit() return {"ok": True}