From f54980c8031c644cbde5daa604756e3b9330f9d9 Mon Sep 17 00:00:00 2001 From: Stephen von Takach Date: Thu, 2 Sep 2021 18:12:38 +1000 Subject: [PATCH] feat(guests controller): improve search query tokenises on space and supports inverted commas --- src/controllers/guests.cr | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/controllers/guests.cr b/src/controllers/guests.cr index 16f451a1..1c97ca29 100644 --- a/src/controllers/guests.cr +++ b/src/controllers/guests.cr @@ -1,3 +1,5 @@ +require "csv" + class Guests < Application base "/api/staff/v1/guests" @@ -139,11 +141,17 @@ class Guests < Application .limit(1500).map { |g| attending_guest(nil, g) } else # Return guests based on the filter query - query = "%#{query}%" - render json: Guest.query - .by_tenant(tenant.id) - .where("searchable LIKE :query", query: query) - .limit(1500).map { |g| attending_guest(nil, g) } + csv = CSV.new(query, strip: true, separator: ' ') + csv.next + parts = csv.row.to_a + + sql_query = Guest.query.by_tenant(tenant.id) + parts.each do |part| + next if part.empty? + sql_query = sql_query.where("searchable LIKE :query", query: "#{part}%") + end + + render json: sql_query.order_by("name").limit(1500).map { |g| attending_guest(nil, g) } end end