"""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