Skip to content

Commit 9642df9

Browse files
Implement search filter functionality in backend
1 parent d1df85e commit 9642df9

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

backend/app/api/routes/items.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,35 @@
1212

1313
@router.get("/", response_model=ItemsPublic)
1414
def read_items(
15-
session: SessionDep, current_user: CurrentUser, skip: int = 0, limit: int = 100
15+
session: SessionDep,
16+
current_user: CurrentUser,
17+
skip: int = 0,
18+
limit: int = 100,
19+
title: str | None = None,
20+
keyword: str | None = None,
21+
owner_id: uuid.UUID | None = None,
1622
) -> Any:
17-
"""
18-
Retrieve items.
19-
"""
23+
statement = select(Item)
2024

21-
if current_user.is_superuser:
22-
count_statement = select(func.count()).select_from(Item)
23-
count = session.exec(count_statement).one()
24-
statement = select(Item).offset(skip).limit(limit)
25-
items = session.exec(statement).all()
26-
else:
27-
count_statement = (
28-
select(func.count())
29-
.select_from(Item)
30-
.where(Item.owner_id == current_user.id)
31-
)
32-
count = session.exec(count_statement).one()
33-
statement = (
34-
select(Item)
35-
.where(Item.owner_id == current_user.id)
36-
.offset(skip)
37-
.limit(limit)
25+
if not current_user.is_superuser:
26+
statement = statement.where(Item.owner_id == current_user.id)
27+
28+
if current_user.is_superuser and owner_id:
29+
statement = statement.where(Item.owner_id == owner_id)
30+
31+
if title:
32+
statement = statement.where(Item.title.ilike(f"%{title}%"))
33+
34+
if keyword:
35+
statement = statement.where(
36+
Item.title.ilike(f"%{keyword}%") |
37+
Item.description.ilike(f"%{keyword}%")
3838
)
39-
items = session.exec(statement).all()
39+
40+
count_statement = select(func.count()).select_from(statement.subquery())
41+
count = session.exec(count_statement).one()
42+
43+
items = session.exec(statement.offset(skip).limit(limit)).all()
4044

4145
return ItemsPublic(data=items, count=count)
4246

0 commit comments

Comments
 (0)