4
4
from fastapi import HTTPException
5
5
from motor .motor_asyncio import AsyncIOMotorCollection # noqa: TCH002
6
6
7
+ from app .core .enums import SortOrder
7
8
from app .database .mongodb import db
8
- from app .schemas .item import CreateItemRequest , Item , UpdateItemRequest
9
+ from app .schemas .item import CreateItemRequest , Item , ItemSortParam , UpdateItemRequest
9
10
from app .utils .object_id import parse_object_id
10
11
11
12
@@ -31,6 +32,36 @@ async def get_all_items(self) -> list[Item]:
31
32
32
33
return [self .to_item (item ) for item in items_list ]
33
34
35
+ async def get_items (
36
+ self ,
37
+ search_text : str | None = None ,
38
+ vendor_id : str | None = None ,
39
+ sort_by : ItemSortParam | None = None ,
40
+ sort_order : SortOrder = SortOrder .ASC ,
41
+ ) -> list [Item ]:
42
+ query = {}
43
+
44
+ if search_text :
45
+ query ["name" ] = {
46
+ "$regex" : search_text ,
47
+ "$options" : "i" ,
48
+ } # case-insensitive partial match
49
+
50
+ if vendor_id :
51
+ query ["vendor_id" ] = ObjectId (vendor_id )
52
+
53
+ sort_criteria = []
54
+ if sort_by :
55
+ sort_direction = 1 if sort_order == SortOrder .ASC else - 1
56
+ sort_criteria .append ((sort_by .field_name , sort_direction ))
57
+
58
+ if sort_criteria :
59
+ items_list = await self .collection .find (query ).sort (sort_criteria ).to_list ()
60
+ else :
61
+ items_list = await self .collection .find (query ).to_list ()
62
+
63
+ return [self .to_item (item ) for item in items_list ]
64
+
34
65
async def get_item (self , item_id : str ) -> Item | None :
35
66
item_obj_id = parse_object_id (item_id )
36
67
0 commit comments