Class: CloverSandboxSimulator::Services::Clover::InventoryService

Inherits:
BaseService
  • Object
show all
Defined in:
lib/clover_sandbox_simulator/services/clover/inventory_service.rb

Overview

Manages Clover inventory: categories, items, modifiers

Instance Attribute Summary

Attributes inherited from BaseService

#config, #logger

Instance Method Summary collapse

Methods inherited from BaseService

#initialize

Constructor Details

This class inherits a constructor from CloverSandboxSimulator::Services::BaseService

Instance Method Details

#associate_item_with_category(item_id, category_id) ⇒ Object

Associate item with category



66
67
68
69
70
71
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 66

def associate_item_with_category(item_id, category_id)
  logger.debug "Associating item #{item_id} with category #{category_id}"
  request(:post, endpoint("category_items"), payload: {
    "elements" => [{ "item" => { "id" => item_id }, "category" => { "id" => category_id } }]
  })
end

#associate_item_with_modifier_group(item_id, modifier_group_id) ⇒ Object

Associate a modifier group with an item



109
110
111
112
113
114
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 109

def associate_item_with_modifier_group(item_id, modifier_group_id)
  logger.debug "Associating item #{item_id} with modifier group #{modifier_group_id}"
  request(:post, endpoint("item_modifier_groups"), payload: {
    "elements" => [{ "item" => { "id" => item_id }, "modifierGroup" => { "id" => modifier_group_id } }]
  })
end

#create_category(name:, sort_order: nil) ⇒ Object

Create a category



18
19
20
21
22
23
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 18

def create_category(name:, sort_order: nil)
  logger.info "Creating category: #{name}"
  payload = { "name" => name }
  payload["sortOrder"] = sort_order if sort_order
  request(:post, endpoint("categories"), payload: payload)
end

#create_item(name:, price:, category_id: nil, sku: nil, hidden: false) ⇒ Object

Create an item



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 43

def create_item(name:, price:, category_id: nil, sku: nil, hidden: false)
  logger.info "Creating item: #{name} ($#{price / 100.0})"

  payload = {
    "name" => name,
    "price" => price,
    "priceType" => "FIXED",
    "hidden" => hidden,
    "defaultTaxRates" => true
  }
  payload["sku"] = sku if sku

  item = request(:post, endpoint("items"), payload: payload)

  # Associate with category if provided
  if item && category_id
    associate_item_with_category(item["id"], category_id)
  end

  item
end

#create_modifier(modifier_group_id:, name:, price: 0) ⇒ Object

Create a modifier within a group



100
101
102
103
104
105
106
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 100

def create_modifier(modifier_group_id:, name:, price: 0)
  logger.info "Creating modifier: #{name} in group #{modifier_group_id}"
  request(:post, endpoint("modifier_groups/#{modifier_group_id}/modifiers"), payload: {
    "name" => name,
    "price" => price
  })
end

#create_modifier_group(name:, min_required: 0, max_allowed: nil) ⇒ Object

Create a modifier group



89
90
91
92
93
94
95
96
97
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 89

def create_modifier_group(name:, min_required: 0, max_allowed: nil)
  logger.info "Creating modifier group: #{name}"
  payload = {
    "name" => name,
    "minRequired" => min_required
  }
  payload["maxAllowed"] = max_allowed if max_allowed
  request(:post, endpoint("modifier_groups"), payload: payload)
end

#delete_allObject

Delete all categories and items



123
124
125
126
127
128
129
130
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 123

def delete_all
  logger.warn "Deleting all inventory..."

  get_items.each { |item| delete_item(item["id"]) }
  get_categories.each { |cat| delete_category(cat["id"]) }

  logger.info "All inventory deleted"
end

#delete_category(category_id) ⇒ Object

Delete a category



26
27
28
29
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 26

def delete_category(category_id)
  logger.info "Deleting category: #{category_id}"
  request(:delete, endpoint("categories/#{category_id}"))
end

#delete_item(item_id) ⇒ Object

Delete an item



74
75
76
77
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 74

def delete_item(item_id)
  logger.info "Deleting item: #{item_id}"
  request(:delete, endpoint("items/#{item_id}"))
end

#delete_modifier_group(modifier_group_id) ⇒ Object

Delete a modifier group



117
118
119
120
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 117

def delete_modifier_group(modifier_group_id)
  logger.info "Deleting modifier group: #{modifier_group_id}"
  request(:delete, endpoint("modifier_groups/#{modifier_group_id}"))
end

#get_categoriesObject

Fetch all categories



9
10
11
12
13
14
15
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 9

def get_categories
  logger.info "Fetching categories..."
  response = request(:get, endpoint("categories"))
  elements = response&.dig("elements") || []
  logger.info "Found #{elements.size} categories"
  elements
end

#get_itemsObject

Fetch all items



32
33
34
35
36
37
38
39
40
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 32

def get_items
  logger.info "Fetching items..."
  response = request(:get, endpoint("items"), params: { expand: "categories,modifierGroups" })
  elements = response&.dig("elements") || []
  # Filter out deleted items
  active_items = elements.reject { |item| item["deleted"] == true }
  logger.info "Found #{active_items.size} active items"
  active_items
end

#get_modifier_groupsObject

Fetch all modifier groups



80
81
82
83
84
85
86
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 80

def get_modifier_groups
  logger.info "Fetching modifier groups..."
  response = request(:get, endpoint("modifier_groups"), params: { expand: "modifiers" })
  elements = response&.dig("elements") || []
  logger.info "Found #{elements.size} modifier groups"
  elements
end