1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-29 10:24:20 +01:00
fab-manager/app/controllers/api/cart_controller.rb

76 lines
2.3 KiB
Ruby
Raw Normal View History

2022-08-19 19:59:13 +02:00
# frozen_string_literal: true
2022-12-30 15:29:52 +01:00
# API Controller to manage user's cart
2023-02-24 17:26:55 +01:00
class API::CartController < API::APIController
include API::OrderConcern
before_action :current_order, except: %i[create]
2022-08-19 19:59:13 +02:00
before_action :ensure_order, except: %i[create]
def create
authorize :cart, :create?
@order ||= Cart::FindOrCreateService.new(current_user).call(order_token)
2022-08-19 19:59:13 +02:00
render 'api/orders/show'
end
2022-12-30 15:29:52 +01:00
def create_item
authorize @current_order, policy_class: CartPolicy
service = Cart::CreateCartItemService.new(@current_order)
@item = service.create(params)
2023-02-24 17:26:55 +01:00
if @item.save(**{ context: @current_order.order_items })
2022-12-30 15:29:52 +01:00
render 'api/orders/item', status: :created
else
render json: @item.errors.full_messages, status: :unprocessable_entity
end
end
2022-08-19 19:59:13 +02:00
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 @current_order, policy_class: CartPolicy
2022-08-19 19:59:13 +02:00
@order = Cart::RemoveItemService.new.call(@current_order, orderable)
render 'api/orders/show'
end
def set_quantity
authorize @current_order, policy_class: CartPolicy
2022-08-19 19:59:13 +02:00
@order = Cart::SetQuantityService.new.call(@current_order, orderable, cart_params[:quantity])
render 'api/orders/show'
end
def set_offer
authorize CartContext.new(params[:customer_id], cart_params[:is_offered])
@order = Cart::SetOfferService.new.call(@current_order, orderable, cart_params[:is_offered])
render 'api/orders/show'
end
def refresh_item
authorize @current_order, policy_class: CartPolicy
@order = Cart::RefreshItemService.new.call(@current_order, orderable)
render 'api/orders/show'
end
def validate
authorize @current_order, policy_class: CartPolicy
@order_errors = Cart::CheckCartService.new.call(@current_order)
render json: @order_errors
end
def set_customer
authorize @current_order, policy_class: CartPolicy
customer = User.find(params[:user_id])
@order = Cart::SetCustomerService.new(current_user).call(@current_order, customer)
render 'api/orders/show'
end
2022-08-19 19:59:13 +02:00
private
def orderable
2022-12-28 17:51:27 +01:00
params[:orderable_type].classify.constantize.find(cart_params[:orderable_id])
2022-08-19 19:59:13 +02:00
end
end