from fastapi.routing import APIRouter from data.schemas import ( SelectQueryBase, SelectQueryInDB, SelectQuery, SelectQueryIn, ) from fastapi import Depends from data.crud import ( create_select_query, read_all_select_queries, read_select_query, ) from core.dependencies import get_db, get_current_user, get_admin_user from utils.mysql_scripts import build_sql_query_text router = APIRouter() @router.post("/check", dependencies=[Depends(get_current_user)]) async def check_select_query(query: SelectQueryBase) -> SelectQuery: sql, params = build_sql_query_text(query) q = SelectQuery(**query.model_dump(), params=params, sql=sql) return q @router.post("/") async def create_select_query_endpoint( query: SelectQueryBase, db=Depends(get_db), user=Depends(get_current_user) ) -> SelectQueryInDB: sql, params = build_sql_query_text(query) query_in = SelectQueryIn( **query.model_dump(), owner_id=user.id, params=params, sql=sql ) return await create_select_query(db=db, query=query_in) @router.get("/", dependencies=[Depends(get_current_user)]) async def get_select_queries_endpoint(db=Depends(get_db)) -> list[SelectQueryInDB]: return await read_all_select_queries(db=db) @router.get("/{query_id}", dependencies=[Depends(get_current_user)]) async def get_select_queries_endpoint( query_id: int, db=Depends(get_db) ) -> SelectQueryInDB: return await read_select_query(db=db, query_id=query_id)