From baf91d73ad5aac2ffb6175124b8e8ca7d89af2f0 Mon Sep 17 00:00:00 2001 From: Tomasz Stolarczyk Date: Tue, 24 Sep 2024 23:44:50 +0200 Subject: [PATCH] Move increment/decrement stock level to dedicated service --- .../app/controllers/orders_controller.rb | 6 +++--- .../app/models/inventory/product_service.rb | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 rails_application/app/models/inventory/product_service.rb diff --git a/rails_application/app/controllers/orders_controller.rb b/rails_application/app/controllers/orders_controller.rb index cbc88589..08bccd19 100644 --- a/rails_application/app/controllers/orders_controller.rb +++ b/rails_application/app/controllers/orders_controller.rb @@ -77,7 +77,7 @@ def add_item @order = Order.find(params[:id]) @order.add_item(product) - product.decrement!(:stock_level) + Inventory::ProductService.new.decrement_stock_level(product.id) @order.save! redirect_to edit_order_path(params[:id]) @@ -87,7 +87,7 @@ def remove_item product = Product.find(params[:product_id]) @order = Order.find(params[:id]) @order.remove_item(product) - product.increment!(:stock_level) + Inventory::ProductService.new.increment_stock_level(product.id) @order.save! redirect_to edit_order_path(params[:id]) @@ -113,7 +113,7 @@ def expire .where(status: "Draft") .find_each do |order| order.order_items.each do |item| - item.product.increment!(:stock_level) + Inventory::ProductService.new.increment_stock_level(item.product.id) end order.status = "Expired" order.save! diff --git a/rails_application/app/models/inventory/product_service.rb b/rails_application/app/models/inventory/product_service.rb new file mode 100644 index 00000000..8a9defcf --- /dev/null +++ b/rails_application/app/models/inventory/product_service.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Inventory + class ProductService + + def decrement_stock_level(product_id) + product = ::Product.find(product_id) + product.decrement!(:stock_level) + end + + def increment_stock_level(product_id) + product = ::Product.find(product_id) + product.increment!(:stock_level) + end + end +end