Class: MenuSectionGeneratorWorker

Inherits:
ApplicationWorker show all
Defined in:
app/workers/menu_section_generator_worker.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationWorker

unlimited_retry

Class Method Details

.cache_key_for(restaurant, restaurant_package, locale) ⇒ Object



66
67
68
# File 'app/workers/menu_section_generator_worker.rb', line 66

def self.cache_key_for(restaurant, restaurant_package, locale)
  "package_serializer/menu_sections/#{restaurant.id}/#{restaurant_package.id}/#{locale}"
end

.read_from_cache(restaurant, restaurant_package, locale) ⇒ Object



70
71
72
# File 'app/workers/menu_section_generator_worker.rb', line 70

def self.read_from_cache(restaurant, restaurant_package, locale)
  Rails.cache.read(self.cache_key_for(restaurant, restaurant_package, locale))
end

Instance Method Details

#perform(restaurant_package_id, locale) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/workers/menu_section_generator_worker.rb', line 5

def perform(restaurant_package_id, locale)
  restaurant_package = HhPackage::RestaurantPackage.fetch restaurant_package_id

  restaurant = restaurant_package.restaurant
  return if restaurant.blank?

  package = restaurant_package.fetch_package
  # cache_key = "#{package.cache_key}/#{restaurant.id}/#{restaurant.all_package_menus.cache_key}/#{package.menu_sections.cache_key}"

  restaurant_menus = restaurant.all_package_menus.select('UNIQUE(package_menu_id), active').pluck(:package_menu_id,
                                                                                                  :active)
  package_menu_ids = restaurant_menus.map(&:first)
  hide_menu_price = package.fetch_package_attr&.hide_menu_price == true

  data = I18n.with_locale locale do
    package.menu_sections.includes(:translations, menus: :translations).order_by_rank.map do |ms|
      {
        id: ms.id,
        quantity_limit: ms.quantity_limit,
        name: ms.name,
        menus: ms.menus.includes(:custom_label,
                                 subsections: :translations).order_by_rank.where(id: package_menu_ids).map do |menu|
                 {
                   id: menu.id,
                   name: menu.name,
                   price: (hide_menu_price ? '0.0' : menu.price.amount),
                   currency: menu.price_currency,
                   priority: menu.index_number,
                   description: menu.description,
                   active: menu.active,
                   image: {
                     thumb: menu.image.present? ? menu.image.url : AdminSetting.default_hh_menu_image,
                     original: menu.image.present? ? menu.image.url : AdminSetting.default_hh_menu_image,
                     original_size: menu.image.present? ? menu.image.url : AdminSetting.default_hh_menu_image,
                   },
                   custom_label: custom_label(menu),
                   sub_sections: menu.subsections.includes(menus: :translations).map do |subsection|
                     {
                       name: subsection.name,
                       id: subsection.id,
                       quantity_limit: subsection.quantity_limit,
                       sub_menus: subsection.menus.map do |m|
                         {
                           name: m.name,
                           id: m.id,
                         }
                       end,
                     }
                   end,
                 }
               end,
      }
    end.delete_if { |section| section[:menus].blank? }
  end

  Rails.cache.write(self.class.cache_key_for(restaurant, restaurant_package, locale),
                    data,
                    expires_in: CACHEFLOW.generate_expiry)
  data
end