70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
|
|
"""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
|