import datetime from typing import List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from .. import models, schemas from ..database import get_db router = APIRouter(tags=["connectors"]) @router.get("/", response_model=List[schemas.CustomConnector]) def list_connectors(db: Session = Depends(get_db)): return db.query(models.CustomConnector).order_by(models.CustomConnector.category, models.CustomConnector.name).all() @router.post("/", response_model=schemas.CustomConnector) def create_connector(connector: schemas.CustomConnectorCreate, db: Session = Depends(get_db)): db_conn = models.CustomConnector(**connector.model_dump()) db.add(db_conn) db.commit() db.refresh(db_conn) return db_conn @router.patch("/{connector_id}", response_model=schemas.CustomConnector) def update_connector(connector_id: int, update: schemas.CustomConnectorUpdate, db: Session = Depends(get_db)): conn = db.query(models.CustomConnector).filter(models.CustomConnector.id == connector_id).first() if not conn: raise HTTPException(status_code=404, detail="Connector not found") for key, value in update.model_dump(exclude_none=True).items(): setattr(conn, key, value) conn.updated_at = datetime.datetime.utcnow() db.commit() db.refresh(conn) return conn @router.delete("/{connector_id}") def delete_connector(connector_id: int, db: Session = Depends(get_db)): conn = db.query(models.CustomConnector).filter(models.CustomConnector.id == connector_id).first() if not conn: raise HTTPException(status_code=404, detail="Connector not found") db.delete(conn) db.commit() return {"ok": True}