mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-02-18 12:54:27 +01:00
55 lines
1.4 KiB
Ruby
55 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# API Controller for manage user's cart
|
||
|
class API::CartController < API::ApiController
|
||
|
before_action :current_order
|
||
|
before_action :ensure_order, except: %i[create]
|
||
|
|
||
|
def create
|
||
|
authorize :cart, :create?
|
||
|
@order = current_order if current_order.present?
|
||
|
@order ||= Cart::CreateService.new.call(current_user)
|
||
|
render 'api/orders/show'
|
||
|
end
|
||
|
|
||
|
def add_item
|
||
|
authorize @current_order, policy_class: CartPolicy
|
||
|
@order = Cart::AddItemService.new.call(@current_order, orderable, cart_params[:quantity])
|
||
|
render 'api/orders/show'
|
||
|
end
|
||
|
|
||
|
def remove_item
|
||
|
authorize :cart, policy_class: CartPolicy
|
||
|
@order = Cart::RemoveItemService.new.call(@current_order, orderable)
|
||
|
render 'api/orders/show'
|
||
|
end
|
||
|
|
||
|
def set_quantity
|
||
|
authorize :cart, policy_class: CartPolicy
|
||
|
@order = Cart::SetQuantityService.new.call(@current_order, orderable, cart_params[:quantity])
|
||
|
render 'api/orders/show'
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def order_token
|
||
|
request.headers['X-Fablab-Order-Token'] || cart_params[:order_token]
|
||
|
end
|
||
|
|
||
|
def current_order
|
||
|
@current_order = Order.find_by(token: order_token)
|
||
|
end
|
||
|
|
||
|
def ensure_order
|
||
|
raise ActiveRecord::RecordNotFound if @current_order.nil?
|
||
|
end
|
||
|
|
||
|
def orderable
|
||
|
Product.find(cart_params[:orderable_id])
|
||
|
end
|
||
|
|
||
|
def cart_params
|
||
|
params.permit(:order_token, :orderable_id, :quantity)
|
||
|
end
|
||
|
end
|