added 'not' modifier to search query

modifiers are now separated by '__'
This commit is contained in:
2023-10-23 17:45:18 +02:00
parent d96bde6214
commit 1ff7ac1d12

View File

@@ -51,15 +51,23 @@ async def sde_types(sde_type: int | str, db: Session = Depends(get_session)) ->
@app.post("/sde/types/search")
async def sde_types_search(query: List[Dict[Literal["id", "name", "name_i", "marketgroup_id", "metagroup_id"], int | str]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]:
async def sde_types_search(query: List[Dict[str, int | str]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]:
items = []
for q in query:
qitems = db.query(models_sde.SDEType)
for k in q.keys():
if k.endswith("_i"):
qitems = qitems.filter(getattr(models_sde.SDEType, k[:-2]).ilike(f"%{q[k]}%")) # change to icontains when sqlmodel start using sqlalchemy > 2.0
value = q[k]
key, mod = k.split("__", 1) if "__" in k else (k, "")
if "i" in mod:
condition = getattr(models_sde.SDEType, key).ilike(f"%{value}%") # change to icontains when sqlmodel start using sqlalchemy > 2.0
else:
qitems = qitems.filter(getattr(models_sde.SDEType, k) == q[k])
condition = getattr(models_sde.SDEType, key) == value
if "not" in mod:
condition = ~condition
qitems = qitems.filter(condition)
items.extend(qitems.all())
return items