51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
|
|
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)
|