diff --git a/src/database/__pycache__/service.cpython-311.pyc b/src/database/__pycache__/service.cpython-311.pyc index 7d94ae7..70e5e19 100644 Binary files a/src/database/__pycache__/service.cpython-311.pyc and b/src/database/__pycache__/service.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/router.cpython-311.pyc b/src/equipment_master/__pycache__/router.cpython-311.pyc index 56fb093..1340054 100644 Binary files a/src/equipment_master/__pycache__/router.cpython-311.pyc and b/src/equipment_master/__pycache__/router.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/service.cpython-311.pyc b/src/equipment_master/__pycache__/service.cpython-311.pyc index 5604941..0dfc118 100644 Binary files a/src/equipment_master/__pycache__/service.cpython-311.pyc and b/src/equipment_master/__pycache__/service.cpython-311.pyc differ diff --git a/src/equipment_master/router.py b/src/equipment_master/router.py index 13f29bf..4341000 100644 --- a/src/equipment_master/router.py +++ b/src/equipment_master/router.py @@ -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" + ) diff --git a/src/equipment_master/service.py b/src/equipment_master/service.py index 5f31e93..99ddd9e 100644 --- a/src/equipment_master/service.py +++ b/src/equipment_master/service.py @@ -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()