diff --git a/backend/app/routers/tables.py b/backend/app/routers/tables.py new file mode 100644 index 0000000..fea198a --- /dev/null +++ b/backend/app/routers/tables.py @@ -0,0 +1,69 @@ +"""Table routes.""" +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from typing import List + +from app.database import get_db +from app.models.table import Table +from app.models.column import Column +from app.schemas.table import TableCreate, TableUpdate, TableResponse + +router = APIRouter(prefix="/tables", tags=["tables"]) + +@router.get("/workspace/{workspace_id}", response_model=List[TableResponse]) +def list_tables(workspace_id: int, db: Session = Depends(get_db)): + """List all tables in a workspace.""" + return db.query(Table).filter(Table.workspace_id == workspace_id).all() + +@router.post("", response_model=TableResponse) +def create_table(table: TableCreate, db: Session = Depends(get_db)): + """Create new table.""" + db_table = Table(**table.model_dump()) + db.add(db_table) + db.commit() + db.refresh(db_table) + return db_table + +@router.get("/{table_id}", response_model=TableResponse) +def get_table(table_id: int, db: Session = Depends(get_db)): + """Get table by ID.""" + table = db.query(Table).filter(Table.id == table_id).first() + if not table: + raise HTTPException(status_code=404, detail="Table not found") + return table + +@router.put("/{table_id}", response_model=TableResponse) +def update_table(table_id: int, table: TableUpdate, db: Session = Depends(get_db)): + """Update table.""" + db_table = db.query(Table).filter(Table.id == table_id).first() + if not db_table: + raise HTTPException(status_code=404, detail="Table not found") + for key, value in table.model_dump(exclude_unset=True).items(): + setattr(db_table, key, value) + db.commit() + db.refresh(db_table) + return db_table + +@router.delete("/{table_id}") +def delete_table(table_id: int, db: Session = Depends(get_db)): + """Delete table.""" + table = db.query(Table).filter(Table.id == table_id).first() + if not table: + raise HTTPException(status_code=404, detail="Table not found") + db.delete(table) + db.commit() + return {"message": "Table deleted"} + +@router.get("/{table_id}/columns") +def get_columns(table_id: int, db: Session = Depends(get_db)): + """Get columns for a table.""" + return db.query(Column).filter(Column.table_id == table_id).all() + +@router.post("/{table_id}/columns") +def create_column(table_id: int, column: dict, db: Session = Depends(get_db)): + """Create column in table.""" + db_column = Column(table_id=table_id, **column) + db.add(db_column) + db.commit() + db.refresh(db_column) + return db_column