brestok commited on
Commit
3e8fd5d
·
1 Parent(s): 704300e
trauma/api/data/db_requests.py CHANGED
@@ -1,6 +1,10 @@
 
 
 
1
  from fastapi import HTTPException
2
 
3
  from trauma.api.data.model import EntityModel
 
4
  from trauma.core.config import settings
5
 
6
 
@@ -15,3 +19,19 @@ async def get_all_model_obj() -> list[EntityModel]:
15
  sort_v = -1
16
  objects = await settings.DB_CLIENT.entities.find({}, {"embedding": 0}).sort("_id", sort_v).to_list(length=None)
17
  return objects
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import asyncio
2
+ import re
3
+
4
  from fastapi import HTTPException
5
 
6
  from trauma.api.data.model import EntityModel
7
+ from trauma.api.data.schemas import SearchRequest
8
  from trauma.core.config import settings
9
 
10
 
 
19
  sort_v = -1
20
  objects = await settings.DB_CLIENT.entities.find({}, {"embedding": 0}).sort("_id", sort_v).to_list(length=None)
21
  return objects
22
+
23
+
24
+ async def search_facilities_obj(data: SearchRequest) -> tuple[list[EntityModel], int]:
25
+ skip = data.pageSize * data.pageIndex
26
+ sort_v = -1
27
+ regex_filter = {"name": {"$regex": f"^{re.escape(data.name)}", "$options": "i"}}
28
+ objects, total_count = await asyncio.gather(
29
+ settings.DB_CLIENT.entities
30
+ .find(regex_filter, {"embeddings": 0})
31
+ .sort("_id", sort_v)
32
+ .skip(skip)
33
+ .limit(data.pageSize)
34
+ .to_list(length=data.pageSize),
35
+ settings.DB_CLIENT.entities.count_documents(regex_filter)
36
+ )
37
+ return [EntityModel.from_mongo(ent) for ent in objects], total_count
trauma/api/data/dto.py CHANGED
@@ -11,4 +11,3 @@ class ContactDetails(BaseModel):
11
  website: str | None = None
12
  address: str | None = None
13
  postalCode: str | None = None
14
-
 
11
  website: str | None = None
12
  address: str | None = None
13
  postalCode: str | None = None
 
trauma/api/data/schemas.py CHANGED
@@ -9,5 +9,12 @@ class AllFacilitiesResponse(BaseModel):
9
  paging: Paging
10
  data: list[EntityModel]
11
 
 
12
  class AllFacilitiesWrapper(TraumaResponseWrapper[AllFacilitiesResponse]):
13
- pass
 
 
 
 
 
 
 
9
  paging: Paging
10
  data: list[EntityModel]
11
 
12
+
13
  class AllFacilitiesWrapper(TraumaResponseWrapper[AllFacilitiesResponse]):
14
+ pass
15
+
16
+
17
+ class SearchRequest(BaseModel):
18
+ name: str
19
+ pageSize: int
20
+ pageIndex: int
trauma/api/data/views.py CHANGED
@@ -4,9 +4,9 @@ from trauma.api.account.dto import AccountType
4
  from trauma.api.account.model import AccountModel
5
  from trauma.api.common.dto import Paging
6
  from trauma.api.data import facility_router
7
- from trauma.api.data.db_requests import get_facility_by_id, get_all_model_obj
8
  from trauma.api.data.model import EntityModel
9
- from trauma.api.data.schemas import AllFacilitiesWrapper, AllFacilitiesResponse
10
  from trauma.core.security import PermissionDependency
11
  from trauma.core.wrappers import TraumaResponseWrapper
12
 
@@ -23,6 +23,18 @@ async def get_all_countries(
23
  return AllFacilitiesWrapper(data=response)
24
 
25
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  @facility_router.get('/{facilityId}')
27
  async def get_country(
28
  facilityId: str,
 
4
  from trauma.api.account.model import AccountModel
5
  from trauma.api.common.dto import Paging
6
  from trauma.api.data import facility_router
7
+ from trauma.api.data.db_requests import get_facility_by_id, get_all_model_obj, search_facilities_obj
8
  from trauma.api.data.model import EntityModel
9
+ from trauma.api.data.schemas import AllFacilitiesWrapper, AllFacilitiesResponse, SearchRequest
10
  from trauma.core.security import PermissionDependency
11
  from trauma.core.wrappers import TraumaResponseWrapper
12
 
 
23
  return AllFacilitiesWrapper(data=response)
24
 
25
 
26
+ @facility_router.post('/search')
27
+ async def search_facilities(
28
+ data: SearchRequest,
29
+ ) -> AllFacilitiesWrapper:
30
+ countries, total_count = await search_facilities_obj(data)
31
+ response = AllFacilitiesResponse(
32
+ paging=Paging(pageSize=data.pageSize, pageIndex=data.pageIndex, totalCount=total_count),
33
+ data=countries
34
+ )
35
+ return AllFacilitiesWrapper(data=response)
36
+
37
+
38
  @facility_router.get('/{facilityId}')
39
  async def get_country(
40
  facilityId: str,
trauma/api/message/ai/engine.py CHANGED
@@ -8,10 +8,15 @@ from trauma.api.data.model import EntityModel, EntityModelExtended
8
  from trauma.api.message.ai.openai_request import (update_entity_data_with_ai,
9
  generate_next_question,
10
  generate_search_request,
11
- generate_final_response, convert_value_to_embeddings,
12
- choose_closest_treatment_method, choose_closest_treatment_area,
13
- check_is_valid_request, generate_invalid_response, set_entity_score,
14
- retrieve_semantic_answer, generate_searched_entity_response)
 
 
 
 
 
15
  from trauma.api.message.db_requests import (save_assistant_user_message,
16
  filter_entities_by_age_location,
17
  update_entity_data_obj, get_entity_by_index)
 
8
  from trauma.api.message.ai.openai_request import (update_entity_data_with_ai,
9
  generate_next_question,
10
  generate_search_request,
11
+ generate_final_response,
12
+ convert_value_to_embeddings,
13
+ choose_closest_treatment_method,
14
+ choose_closest_treatment_area,
15
+ check_is_valid_request,
16
+ generate_invalid_response,
17
+ set_entity_score,
18
+ retrieve_semantic_answer,
19
+ generate_searched_entity_response)
20
  from trauma.api.message.db_requests import (save_assistant_user_message,
21
  filter_entities_by_age_location,
22
  update_entity_data_obj, get_entity_by_index)