Merge pull request #537 from eventcally/issues/536

Advanced keyword filter #536
This commit is contained in:
Daniel Grams 2023-08-29 22:16:43 +02:00 committed by GitHub
commit bc3576452d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 5 deletions

View File

@ -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,
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:

View File

@ -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):