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=["devices"]) @router.post("/", response_model=schemas.Device) def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)): diagram = db.query(models.Diagram).filter(models.Diagram.id == device.diagram_id).first() if not diagram: raise HTTPException(status_code=404, detail="Diagram not found") db_device = models.Device(**device.model_dump()) db.add(db_device) diagram.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(db_device) return db_device @router.patch("/{device_id}", response_model=schemas.Device) def update_device(device_id: int, update: schemas.DeviceUpdate, db: Session = Depends(get_db)): device = db.query(models.Device).filter(models.Device.id == device_id).first() if not device: raise HTTPException(status_code=404, detail="Device not found") for key, value in update.model_dump(exclude_none=True).items(): setattr(device, key, value) diagram = db.query(models.Diagram).filter(models.Diagram.id == device.diagram_id).first() if diagram: diagram.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(device) return device @router.delete("/{device_id}") def delete_device(device_id: int, db: Session = Depends(get_db)): device = db.query(models.Device).filter(models.Device.id == device_id).first() if not device: raise HTTPException(status_code=404, detail="Device not found") db.delete(device) db.commit() return {"ok": True}