From 5dcddd5729e9dcb42938553d7ded2634b28fbd2f Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Mon, 23 Dec 2024 14:37:45 +0700 Subject: [PATCH] feat: search query on equipment master --- .../__pycache__/service.cpython-311.pyc | Bin 5180 -> 5180 bytes .../__pycache__/router.cpython-311.pyc | Bin 2341 -> 2468 bytes .../__pycache__/service.cpython-311.pyc | Bin 2314 -> 2560 bytes src/equipment_master/router.py | 29 +++++++++++------- src/equipment_master/service.py | 25 ++++++++++----- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/database/__pycache__/service.cpython-311.pyc b/src/database/__pycache__/service.cpython-311.pyc index 7d94ae750bf5951e8cf5c38804278fd1434fdd93..70e5e19dc9bd43286ab7e014c632d76fb7e0dc46 100644 GIT binary patch delta 20 acmdm^u}6b@IWI340}x!~&)mpuC;|XEWd!K} delta 20 acmdm^u}6b@IWI340}xz!6Tgw$Py_%zb_Krx diff --git a/src/equipment_master/__pycache__/router.cpython-311.pyc b/src/equipment_master/__pycache__/router.cpython-311.pyc index 56fb0936581893354a2ad172cb73768e68d842a4..13400543166ca91360a61206743b9684b2d1c1c7 100644 GIT binary patch delta 790 zcmZ`$&ubG=5T5tm?q=KW7R`@l(sIh^X0(Em+h|dubyT z0~N(X!UL-yr3Y=5Rw#JzFA#d%Ll27w>Cxkc+KV7KZ>;7=mI&3rBNc>GgNwvcKG&xBk z{07N}qP9_ztk|bTa-B?mRm%2lr#M-ZnsfjK<0{(j1VSDNEWu1u1E4}HtO6CXK~}MA zz1dj>3+CBXSYnIPBWZ@U-dK_N2s2d4iDS-5@N4XRSaxFK(j{O&{gK6G8Sfds#cnP1 zVx*&$iwNKGc?^4!Ge?I@8uy(e3MO*;lJc`;W(yKXyxY! z`vahq3 z1wDrWd-J3%YLS8m@edGsoP|AF`UfQavmm=Bh3-*1?A-CEeI6OV_eUqUg>H z!Z-Zd3pfqGnSXJ{EWpD1B=GLs41R1#VZP#4eVyg&?O00_baN(_`Ziz&}xo2@IQOb}6^3IP$g9h(YdL3W1@ z2O&Y&FD2jFPw1t6mx(kBK3ol?t~5a;>c^t*xm`pN%F;$lGl0@MY;RR910 diff --git a/src/equipment_master/__pycache__/service.cpython-311.pyc b/src/equipment_master/__pycache__/service.cpython-311.pyc index 5604941c0a36fd7309bca27cbd011d8e2970d3fc..0dfc118f68f3f5f23dd573f30c1356d10f1877de 100644 GIT binary patch delta 833 zcmZ`$-Afcv6u)=o-kJTFac945H7A5kWnDk8NS{JNSBtO@)QEjZHt$$VelfEz)kq79 zgosv`GAL;uf7SDU^@2 zJX2L4VD>STy^_WNeBq>Op1oxE<=vJ`=flLe0Mj+Z&s=#d5Y<4W#_$+{x~d+Kz~6jA zBHDtK)+*Yd5tu+Ew1Cn<;vWWy$g8dQ5c=q%aBfg2d1o`GF`XOBl9FT@8FTz<$ww}a zS%zh0XQs^q><%-=V7z)6Vu{RRp2hA(2*7CoX$H1>kqynbjS2#FaG0JE+kJD$7R>H_ zTQz=OU9ke@GCv^D79KHN7wHpG$B3yVei8t=KvfF>5%_5z$_4lBAtKr+3vKZ!T!Hg| zfSck4uqG~|Ic#G#C_eKOHkk^mDB-CYVobgO2`~L6#@f+zX38kx>}2+uQIcn7b8J-0 zj54Lkefq79eu#n2OMqC z)dpFK5?mcx8d{HZJP$hcNw+@fC~dCNmQQ_+biUp~D-a%{!%~;O(s?uM&5YAksoB@T z(pKK@b^2DSk8Je1$>SeRjBF=I9A(s1M)Rp6{Vr|523nAh`uTJwFEMrcS&l`Iv6THW zu)++>B80FAnyBh|a3ca54;LF6%idZTE`uuUXmw@Gi3GIRLveYoEOX`oYV^+V^3Xr( YKXpei3>8k50bAbnRhIvPS<8C)4ONuL%>V!Z delta 674 zcmZn==@L?3&dbZi00j0AOf}4zj5SP482cET8B!RknZp>SGq+D$S(`q=kXFxO(zRb~z)L8`>tHm>G3UKQb`#ntcHg_swiK zrSHu<5qQzg|B9XeMYDh_W&t0V8Cbc#vN4DnY+lFO$H*u%*_Pdq8*G;n(6l1?$(8JC zwpu`@9LVrGAn^hS8yN2L2u-!W$fJCPNBKIB)+HXTyBy+IIHWGf8D8Qr{K(A6YYei~ zxWVEf8Kow-au{2I99aZ1tVkL}h=B+ZAn}XC1{f%%IjMF|# 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()