Class: Api::Partner::ReservationSummariesFilter

Inherits:
Object
  • Object
show all
Includes:
ElasticAPM::SpanHelpers, ReservationHistory
Defined in:
app/filters/api/partner/reservation_summaries_filter.rb

Overview

Note:

This filter expects associations to be pre-loaded by the controller. It does not handle association loading internally for optimal performance.

Filter class for Partner API reservation summaries with dashboard pattern optimization.

This filter follows the dashboard controller pattern where the controller builds the base query with associations loaded, and the filter only handles filtering logic. This approach provides better performance and separation of concerns.

Examples:

Basic usage

# Controller builds base query with associations
base_summaries = Partners::ReservationSummary
  .includes(:summary_packages, :summary_add_ons)
  .where(restaurant_id: restaurant_ids)
  .where(is_temporary: false, for_locking_system: false)

# Filter handles filtering and ordering
filter = Api::Partner::ReservationSummariesFilter.new(base_summaries)
filter.filter(params[:filter]) if params[:filter].present?
filter.order_by(params[:order])
filter.build_collections

# Paginate and serialize
pagy, summaries = pagy(filter.collections, items: 10)
json_data = filter.as_json(summaries, pagination_options)

Filtering by status

filter.filter({ status: 'confirmed' })

Filtering by package type

filter.filter({ package_type: 'buffet' })

Complex filtering

filter.filter({
  status: 'confirmed',
  service_type: 'dine_in',
  date_from: '2025-01-01',
  date_to: '2025-01-31'
})

See Also:

Author:

  • HungryHub Development Team

Since:

  • 2025-01-01

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ReservationHistory

#history, #history_result

Constructor Details

#initialize(base_collections, restaurant_ids = nil) ⇒ ReservationSummariesFilter

Returns a new instance of ReservationSummariesFilter.

Since:

  • 2025-01-01



68
69
70
71
72
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 68

def initialize(base_collections, restaurant_ids = nil)
  @config = {}
  @restaurant_ids = restaurant_ids
  self.collections = base_collections
end

Instance Attribute Details

#collectionsObject

Since:

  • 2025-01-01



53
54
55
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 53

def collections
  @collections
end

#error_messageObject

Since:

  • 2025-01-01



53
54
55
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 53

def error_message
  @error_message
end

#restaurant_idsObject (readonly)

Since:

  • 2025-01-01



54
55
56
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 54

def restaurant_ids
  @restaurant_ids
end

Instance Method Details

#as_json(collections, options = {}) ⇒ Hash

Serialize collections to JSON using the reservation summary serializer

Examples:

pagy, summaries = pagy(filter.collections, items: 10)
json_data = filter.as_json(summaries, { pagy: pagy })

Parameters:

  • collections (ActiveRecord::Relation, Array)

    The reservation summaries to serialize

  • options (Hash) (defaults to: {})

    Serialization options (pagination, includes, etc.)

Options Hash (options):

  • :pagy (Pagy)

    Pagination object for meta information

  • :include (Array<String>)

    Additional associations to include

Returns:

  • (Hash)

    Serialized JSON data with reservation summaries and metadata

Since:

  • 2025-01-01



117
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 117

span_method :as_json

#build_collectionsActiveRecord::Relation

Build the final filtered and ordered collections

Applies all configured filters and ordering to the base collections. This method should be called after setting filters and ordering.

Examples:

filter.filter({ status: 'confirmed' })
filter.order_by(['date', 'start_time'])
filter.build_collections
summaries = filter.collections.limit(10)

Returns:

  • (ActiveRecord::Relation)

    The fully filtered and ordered collections

Since:

  • 2025-01-01



151
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 151

span_method :build_collections

#filter(filter_par) ⇒ void

This method returns an undefined value.

Apply filters to the collections

Parameters:

  • filter_par (Hash)

    The filter parameters

Options Hash (filter_par):

  • :status (String) — default: 'confirmed', 'pending', 'cancelled', etc.
  • :service_type (String) — default: 'dine_in', 'delivery', 'takeaway'
  • :date_from (String)

    Start date for filtering (YYYY-MM-DD format)

  • :date_to (String)

    End date for filtering (YYYY-MM-DD format)

  • :package_type (String) — default: 'buffet', 'ayce', 'addon', 'all'
  • :specific_package_name (String)

    Package name pattern to search

  • :specific_package_id (String)

    Specific package or add-on ID

  • :booking_id (String)

    Specific booking ID to find

  • :party_size (String)

    Number of guests

Since:

  • 2025-01-01



87
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 87

span_method :filter

#filter_paramsHash?

Get the current filter parameters

Returns:

  • (Hash, nil)

    The filter parameters hash or nil if no filters set

Since:

  • 2025-01-01



180
181
182
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 180

def filter_params
  config[:filter]
end

#order_by(order) ⇒ void

This method returns an undefined value.

Apply ordering to the collections

Examples:

filter.order_by(['date', 'start_time'])
filter.order_by(['id']) # default ordering

Parameters:

  • order (Array<String>)

    Array of field names to order by

Since:

  • 2025-01-01



101
# File 'app/filters/api/partner/reservation_summaries_filter.rb', line 101

span_method :order_by