feat: search query on equipment master

main
MrWaradana 1 year ago
parent 53383cd812
commit 5dcddd5729

@ -1,5 +1,3 @@
from typing import Annotated, List, Optional
from src.models import StandardResponse
@ -8,6 +6,7 @@ from fastapi import APIRouter, HTTPException, Query, status
from .schema import EquipmentMasterPaginated, EquipmentMasterRead
from src.database.service import search_filter_sort_paginate, CommonParameters
from src.database.core import DbSession
router = APIRouter()
@ -16,18 +15,24 @@ async def get_all_equipment_master_tree(
db_session: DbSession,
common: CommonParameters,
parent_id: Annotated[Optional[str], Query(description="Parent ID")] = None,
search: Optional[str] = Query(None),
):
equipment_masters = await get_all_master(parent_id=parent_id, db_session=db_session, common=common)
equipment_masters = await get_all_master(
parent_id=parent_id, search=search, db_session=db_session, common=common
)
return StandardResponse(data=equipment_masters, message="Data retrieved successfully")
return StandardResponse(
data=equipment_masters, message="Data retrieved successfully"
)
@router.get("/{equipment_master_id}", response_model=StandardResponse[EquipmentMasterRead])
async def get_equipment_master_tree(
db_session: DbSession, equipment_master_id: str
):
equipment_master = await get_master(db_session=db_session, equipment_master_id=equipment_master_id)
@router.get(
"/{equipment_master_id}", response_model=StandardResponse[EquipmentMasterRead]
)
async def get_equipment_master_tree(db_session: DbSession, equipment_master_id: str):
equipment_master = await get_master(
db_session=db_session, equipment_master_id=equipment_master_id
)
if not equipment_master:
raise HTTPException(
@ -35,4 +40,6 @@ async def get_equipment_master_tree(
detail="A data with this id does not exist.",
)
return StandardResponse(data=equipment_master, message="Data retrieved successfully")
return StandardResponse(
data=equipment_master, message="Data retrieved successfully"
)

@ -1,5 +1,3 @@
from sqlalchemy import Select, select
from src.database.core import DbSession
from sqlalchemy.orm import selectinload
@ -16,9 +14,23 @@ def recursive_load(depth=5):
return loader
async def get_all_master(*, db_session: DbSession, parent_id: Optional[str] = None, common):
query = Select(EquipmentMaster).filter(EquipmentMaster.parent_id ==
parent_id).options(recursive_load(5))
async def get_all_master(
*,
db_session: DbSession,
parent_id: Optional[str] = None,
search: Optional[str] = None,
common,
):
query = Select(EquipmentMaster)
if parent_id:
query = query.filter(EquipmentMaster.parent_id == parent_id)
if search:
query = query.filter(EquipmentMaster.name.ilike(f"%{search}%"))
query = query.options(recursive_load(5))
results = await search_filter_sort_paginate(model=query, **common)
# results = await db_session.execute(query)
@ -28,8 +40,7 @@ async def get_all_master(*, db_session: DbSession, parent_id: Optional[str] = No
async def get_master(*, db_session: DbSession, equipment_master_id: str):
query = Select(EquipmentMaster).filter(
EquipmentMaster.id == equipment_master_id)
query = Select(EquipmentMaster).filter(EquipmentMaster.id == equipment_master_id)
result = await db_session.execute(query)
result = result.unique().scalars().one_or_none()

Loading…
Cancel
Save