diff --git a/project/services/event.py b/project/services/event.py index 8172ead..1adb281 100644 --- a/project/services/event.py +++ b/project/services/event.py @@ -69,9 +69,16 @@ def fill_event_filter(event_filter, params: EventSearchParams): if params.keyword: tq = func.websearch_to_tsquery("german", params.keyword) + like_keyword = "%" + params.keyword + "%" event_filter = and_( event_filter, - Event.__ts_vector__.op("@@")(tq), + or_( + Event.__ts_vector__.op("@@")(tq), + Event.name.ilike(like_keyword), + EventPlace.name.ilike(like_keyword), + Location.city.ilike(like_keyword), + EventOrganizer.name.ilike(like_keyword), + ), ) if params.category_id: @@ -250,6 +257,7 @@ def get_event_dates_query(params: EventSearchParams): .join(Event.admin_unit) .join(Event.event_place, isouter=True) .join(EventPlace.location, isouter=True) + .join(Event.organizer, isouter=True) ) if admin_unit_reference: @@ -268,7 +276,7 @@ def get_event_dates_query(params: EventSearchParams): .joinedload(Event.categories) .load_only(EventCategory.id, EventCategory.name), joinedload(EventDate.event) - .joinedload(Event.organizer) + .contains_eager(Event.organizer) .load_only(EventOrganizer.id, EventOrganizer.name), joinedload(EventDate.event).joinedload(Event.photo).load_only(Image.id), joinedload(EventDate.event) @@ -382,6 +390,7 @@ def get_events_query(params: EventSearchParams): Event.query.join(Event.admin_unit) .join(Event.event_place, isouter=True) .join(EventPlace.location, isouter=True) + .join(Event.organizer, isouter=True) ) if admin_unit_reference: diff --git a/tests/api/test_event_date.py b/tests/api/test_event_date.py index 93c6b8d..0fbf18a 100644 --- a/tests/api/test_event_date.py +++ b/tests/api/test_event_date.py @@ -176,7 +176,9 @@ def test_search_public_status(client, seeder: Seeder, utils: UtilActions, app, d assert response.json["items"][0]["event"]["id"] == published_id url = utils.get_url( - "api_v1_event_date_search", public_status=["published", "planned"] + "api_v1_event_date_search", + public_status=["published", "planned"], + sort="-created_at", ) response = utils.get_json_ok(url) assert len(response.json["items"]) == 1 @@ -185,8 +187,8 @@ def test_search_public_status(client, seeder: Seeder, utils: UtilActions, app, d seeder.authorize_api_access(user_id, admin_unit_id) response = utils.get_json_ok(url) assert len(response.json["items"]) == 2 - assert response.json["items"][0]["event"]["id"] == published_id - assert response.json["items"][1]["event"]["id"] == planned_id + assert response.json["items"][0]["event"]["id"] == planned_id + assert response.json["items"][1]["event"]["id"] == published_id def test_search_oneDay(client, seeder: Seeder, utils: UtilActions):