Class: PartnerService::ChangeTracker

Inherits:
Object
  • Object
show all
Includes:
ImageHelper, Trackers::Helper
Defined in:
app/services/partner_service/change_tracker.rb

Overview

The ChangeTracker class is responsible for tracking and managing changes made by staff to various records within a restaurant's account. It provides functionality for recording changes, notifying managers via email, and generating context-specific breadcrumbs and URLs.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ImageHelper

#fix_image_url

Constructor Details

#initialize(staff) ⇒ ChangeTracker

Initializes a new ChangeTracker instance.

Parameters:

  • staff (Staff)

    The staff member making the changes.



15
16
17
18
19
20
# File 'app/services/partner_service/change_tracker.rb', line 15

def initialize(staff)
  @staff = staff
  @changes = {}
  @navigation = nil
  @footer_text = nil
end

Instance Attribute Details

#changesObject

Returns the value of attribute changes.



10
11
12
# File 'app/services/partner_service/change_tracker.rb', line 10

def changes
  @changes
end

Returns the value of attribute footer_text.



10
11
12
# File 'app/services/partner_service/change_tracker.rb', line 10

def footer_text
  @footer_text
end

Returns the value of attribute navigation.



10
11
12
# File 'app/services/partner_service/change_tracker.rb', line 10

def navigation
  @navigation
end

#staffObject

Returns the value of attribute staff.



10
11
12
# File 'app/services/partner_service/change_tracker.rb', line 10

def staff
  @staff
end

Instance Method Details

#notify_managers(restaurant) ⇒ Object

Sends an email notification to managers, summarizing all tracked changes.

Parameters:

  • restaurant (Restaurant)

    The restaurant for which changes were made.



25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/services/partner_service/change_tracker.rb', line 25

def notify_managers(restaurant)
  return if changes.empty?

  StaffMailer.notify_managers(
    @staff,
    restaurant,
    changes.transform_keys(&:to_s),
    breadcrumb,
    partner_portal_url,
    @footer_text,
  ).deliver_now
end

#track_added_picture(picture) ⇒ Object

Tracks the addition of a new restaurant picture.

Parameters:

  • picture (Object)

    The picture that was added.



112
113
114
115
116
# File 'app/services/partner_service/change_tracker.rb', line 112

def track_added_picture(picture)
  service = PartnerService::Trackers::GalleryService.new
  service.track_added_picture(picture)
  config_service(service)
end

#track_block_inventory(valid_params, restaurant_id) ⇒ Object

Tracks inventory blocks for a restaurant.

Parameters:

  • valid_params (Hash)

    The validated parameters for blocking inventory.

  • restaurant_id (Integer)

    The ID of the restaurant.



94
95
96
97
98
# File 'app/services/partner_service/change_tracker.rb', line 94

def track_block_inventory(valid_params, restaurant_id)
  service = PartnerService::Trackers::InventoryService.new
  service.track_block_inventory(valid_params, restaurant_id)
  config_service(service)
end

#track_changes_by_model(record:, params:, nav:) ⇒ Object

Tracks changes for a given record and stores them in the `changes` hash.

Parameters:

  • record (ActiveRecord::Base)

    The record being modified.

  • params (Hash)

    The parameters containing the new values for the record.

  • nav (String)

    The navigation context or section where the changes occurred.



43
44
45
46
47
# File 'app/services/partner_service/change_tracker.rb', line 43

def track_changes_by_model(record:, params:, nav:)
  service = PartnerService::Trackers::CommonService.new(record: record, params: params, nav: nav)
  service.call
  config_service(service)
end

#track_deleted_picture(pictures) ⇒ Object

Tracks the deletion of restaurant pictures.

Parameters:

  • pictures (Array)

    The pictures that were deleted.



103
104
105
106
107
# File 'app/services/partner_service/change_tracker.rb', line 103

def track_deleted_picture(pictures)
  service = PartnerService::Trackers::GalleryService.new
  service.track_deleted_picture(pictures)
  config_service(service)
end

#track_primary_tag(restaurant, new_tag_id, category_code) ⇒ Object

Tracks changes in the primary tag of a restaurant.

Parameters:

  • restaurant (Restaurant)

    The restaurant being updated.

  • new_tag_id (Integer)

    The ID of the new primary tag.

  • category_code (String)

    The category code associated with the tag.



64
65
66
67
68
# File 'app/services/partner_service/change_tracker.rb', line 64

def track_primary_tag(restaurant, new_tag_id, category_code)
  service = PartnerService::Trackers::TagService.new
  service.track_primary_tag(restaurant, new_tag_id, category_code)
  config_service(service)
end

#track_staff_created(staff) ⇒ Object

Tracks the creation of a staff account.

Parameters:

  • staff (Staff)

    The staff account that was created.



121
122
123
124
125
# File 'app/services/partner_service/change_tracker.rb', line 121

def track_staff_created(staff)
  service = PartnerService::Trackers::StaffService.new
  service.track_staff_created(staff)
  config_service(service)
end

#track_staff_deleted(staff) ⇒ Object

Tracks the deletion of a staff account.

Parameters:

  • staff (Staff)

    The staff account that was deleted.



130
131
132
133
134
# File 'app/services/partner_service/change_tracker.rb', line 130

def track_staff_deleted(staff)
  service = PartnerService::Trackers::StaffService.new
  service.track_staff_deleted(staff)
  config_service(service)
end

#track_staff_updated(staff, staff_param) ⇒ Object

Tracks updates made to a staff account.

Parameters:

  • staff (Staff)

    The staff account being updated.

  • staff_param (Hash)

    The parameters containing the updated values.



140
141
142
143
144
145
146
147
148
# File 'app/services/partner_service/change_tracker.rb', line 140

def track_staff_updated(staff, staff_param)
  staff_param = staff_param.tap { |p| p.delete(:first_name); p.delete(:last_name) }
  service = PartnerService::Trackers::CommonService.new(record: staff, params: staff_param, nav: 'staffs')
  service.call

  @navigation = 'staffs'
  @footer_text = Time.zone.now.strftime('%d %B %Y, %H:%M')
  config_service(service)
end

#track_tag(old_ids, new_ids) ⇒ Object

Tracks changes in tags.

Parameters:

  • old_ids (Array<Integer>)

    The IDs of the original tags.

  • new_ids (Array<Integer>)

    The IDs of the updated tags.



53
54
55
56
57
# File 'app/services/partner_service/change_tracker.rb', line 53

def track_tag(old_ids, new_ids)
  service = PartnerService::Trackers::TagService.new
  service.track_tag(old_ids, new_ids)
  config_service(service)
end

#track_thumbnails(old_ids, new_ids) ⇒ Object

Tracks changes in restaurant thumbnails.

Parameters:

  • old_ids (Array<Integer>)

    The IDs of the original thumbnails.

  • new_ids (Array<Integer>)

    The IDs of the updated thumbnails.



74
75
76
77
78
# File 'app/services/partner_service/change_tracker.rb', line 74

def track_thumbnails(old_ids, new_ids)
  service = PartnerService::Trackers::ThumbnailService.new
  service.track_thumbnails(old_ids, new_ids)
  config_service(service)
end

#track_update_inventory(params, restaurant_id) ⇒ Object

Tracks updates to inventory records.

Parameters:

  • params (Hash)

    The parameters for the inventory updates.

  • restaurant_id (Integer)

    The ID of the restaurant.



84
85
86
87
88
# File 'app/services/partner_service/change_tracker.rb', line 84

def track_update_inventory(params, restaurant_id)
  service = PartnerService::Trackers::InventoryService.new
  service.track_update_inventory(params, restaurant_id)
  config_service(service)
end