Skip to content

Commit b450a35

Browse files
committed
search_text field unification in events
1 parent 9216e88 commit b450a35

File tree

6 files changed

+19
-35
lines changed

6 files changed

+19
-35
lines changed

backend/app/api/routes/admin/events.py

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,9 @@
2222
EventReplayStatusResponse,
2323
EventStatsResponse,
2424
)
25-
from app.schemas_pydantic.admin_events import EventFilter as AdminEventFilter
2625
from app.schemas_pydantic.user import UserResponse
2726
from app.services.admin import AdminEventsService
2827

29-
30-
def _to_event_filter(pydantic_filter: AdminEventFilter) -> EventFilter:
31-
"""Convert Pydantic EventFilter to domain EventFilter."""
32-
data = pydantic_filter.model_dump(mode="json") # auto-converts enums to strings
33-
data["text_search"] = data.pop("search_text", None)
34-
return EventFilter(**data)
35-
36-
3728
router = APIRouter(
3829
prefix="/admin/events", tags=["admin-events"], route_class=DishkaRoute, dependencies=[Depends(admin_user)]
3930
)
@@ -42,7 +33,7 @@ def _to_event_filter(pydantic_filter: AdminEventFilter) -> EventFilter:
4233
@router.post("/browse")
4334
async def browse_events(request: EventBrowseRequest, service: FromDishka[AdminEventsService]) -> EventBrowseResponse:
4435
try:
45-
event_filter = _to_event_filter(request.filters)
36+
event_filter = EventFilter(**request.filters.model_dump(mode="json"))
4637

4738
result = await service.browse_events(
4839
event_filter=event_filter,
@@ -85,12 +76,10 @@ async def export_events_csv(
8576
limit: int = Query(default=10000, le=50000),
8677
) -> StreamingResponse:
8778
try:
88-
export_filter = _to_event_filter(
89-
AdminEventFilter(
90-
event_types=event_types,
91-
start_time=start_time,
92-
end_time=end_time,
93-
)
79+
export_filter = EventFilter(
80+
event_types=[str(et) for et in event_types] if event_types else None,
81+
start_time=start_time,
82+
end_time=end_time,
9483
)
9584
result = await service.export_events_csv_content(event_filter=export_filter, limit=limit)
9685
return StreamingResponse(
@@ -117,16 +106,14 @@ async def export_events_json(
117106
) -> StreamingResponse:
118107
"""Export events as JSON with comprehensive filtering."""
119108
try:
120-
export_filter = _to_event_filter(
121-
AdminEventFilter(
122-
event_types=event_types,
123-
aggregate_id=aggregate_id,
124-
correlation_id=correlation_id,
125-
user_id=user_id,
126-
service_name=service_name,
127-
start_time=start_time,
128-
end_time=end_time,
129-
)
109+
export_filter = EventFilter(
110+
event_types=[str(et) for et in event_types] if event_types else None,
111+
aggregate_id=aggregate_id,
112+
correlation_id=correlation_id,
113+
user_id=user_id,
114+
service_name=service_name,
115+
start_time=start_time,
116+
end_time=end_time,
130117
)
131118
result = await service.export_events_json_content(event_filter=export_filter, limit=limit)
132119
return StreamingResponse(

backend/app/api/routes/events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ async def query_events(
107107
service_name=filter_request.service_name,
108108
start_time=filter_request.start_time,
109109
end_time=filter_request.end_time,
110-
text_search=filter_request.text_search,
110+
search_text=filter_request.search_text,
111111
)
112112

113113
result = await event_service.query_events_advanced(

backend/app/db/repositories/admin/admin_events_repository.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class ReplaySessionStatusDetail:
4141
class AdminEventsRepository:
4242
def _event_filter_conditions(self, f: EventFilter) -> list[Any]:
4343
"""Build Beanie query conditions from EventFilter."""
44-
text_search = f.text_search or f.search_text
4544
conditions = [
4645
In(EventDocument.event_type, f.event_types) if f.event_types else None,
4746
EventDocument.aggregate_id == f.aggregate_id if f.aggregate_id else None,
@@ -50,7 +49,7 @@ def _event_filter_conditions(self, f: EventFilter) -> list[Any]:
5049
EventDocument.metadata.service_name == f.service_name if f.service_name else None,
5150
GTE(EventDocument.timestamp, f.start_time) if f.start_time else None,
5251
LTE(EventDocument.timestamp, f.end_time) if f.end_time else None,
53-
Text(text_search) if text_search else None,
52+
Text(f.search_text) if f.search_text else None,
5453
]
5554
return [c for c in conditions if c is not None]
5655

backend/app/domain/events/event_models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ class EventFilter:
8181
start_time: datetime | None = None
8282
end_time: datetime | None = None
8383
search_text: str | None = None
84-
text_search: str | None = None
8584
status: str | None = None
8685

8786

backend/app/schemas_pydantic/events.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class EventFilterRequest(BaseModel):
7272
service_name: str | None = Field(None, description="Filter by service name")
7373
start_time: datetime | None = Field(None, description="Filter events after this time")
7474
end_time: datetime | None = Field(None, description="Filter events before this time")
75-
text_search: str | None = Field(None, description="Full-text search in event data")
75+
search_text: str | None = Field(None, description="Full-text search in event data")
7676
sort_by: str = Field("timestamp", description="Field to sort by")
7777
sort_order: SortOrder = Field(SortOrder.DESC, description="Sort order")
7878
limit: int = Field(100, ge=1, le=1000, description="Maximum events to return")
@@ -190,7 +190,7 @@ class EventQuery(BaseModel):
190190
service_name: str | None = None
191191
start_time: datetime | None = None
192192
end_time: datetime | None = None
193-
text_search: str | None = None
193+
search_text: str | None = None
194194
limit: int = Field(default=100, ge=1, le=1000)
195195
skip: int = Field(default=0, ge=0)
196196

backend/app/services/event_service.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ def _filter_to_mongo_query(flt: EventFilter) -> dict[str, Any]:
4242
time_query["$lte"] = flt.end_time
4343
query["timestamp"] = time_query
4444

45-
search = getattr(flt, "text_search", None) or getattr(flt, "search_text", None)
46-
if search:
47-
query["$text"] = {"$search": search}
45+
if flt.search_text:
46+
query["$text"] = {"$search": flt.search_text}
4847

4948
return query
5049

0 commit comments

Comments
 (0)