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