PageRenderTime 1269ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/api/app/controllers/spree/api/v1/orders_controller.rb

https://gitlab.com/shinvdu/spree
Ruby | 137 lines | 116 code | 20 blank | 1 comment | 15 complexity | 4ebb756ef1547aa4c861ed164a4047c7 MD5 | raw file
  1. module Spree
  2. module Api
  3. module V1
  4. class OrdersController < Spree::Api::BaseController
  5. skip_before_action :authenticate_user, only: :apply_coupon_code
  6. before_action :find_order, except: [:create, :mine, :current, :index, :update]
  7. # Dynamically defines our stores checkout steps to ensure we check authorization on each step.
  8. Order.checkout_steps.keys.each do |step|
  9. define_method step do
  10. find_order
  11. authorize! :update, @order, params[:token]
  12. end
  13. end
  14. def cancel
  15. authorize! :update, @order, params[:token]
  16. @order.canceled_by(current_api_user)
  17. respond_with(@order, default_template: :show)
  18. end
  19. def approve
  20. authorize! :approve, @order, params[:token]
  21. @order.approved_by(current_api_user)
  22. respond_with(@order, default_template: :show)
  23. end
  24. def create
  25. authorize! :create, Order
  26. order_user = if @current_user_roles.include?('admin') && order_params[:user_id]
  27. Spree.user_class.find(order_params[:user_id])
  28. else
  29. current_api_user
  30. end
  31. import_params = if @current_user_roles.include?("admin")
  32. params[:order].present? ? params[:order].permit! : {}
  33. else
  34. order_params
  35. end
  36. @order = Spree::Core::Importer::Order.import(order_user, import_params)
  37. respond_with(@order, default_template: :show, status: 201)
  38. end
  39. def empty
  40. authorize! :update, @order, order_token
  41. @order.empty!
  42. render text: nil, status: 204
  43. end
  44. def index
  45. authorize! :index, Order
  46. @orders = Order.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
  47. respond_with(@orders)
  48. end
  49. def show
  50. authorize! :show, @order, order_token
  51. respond_with(@order)
  52. end
  53. def update
  54. find_order(true)
  55. authorize! :update, @order, order_token
  56. if @order.contents.update_cart(order_params)
  57. user_id = params[:order][:user_id]
  58. if current_api_user.has_spree_role?('admin') && user_id
  59. @order.associate_user!(Spree.user_class.find(user_id))
  60. end
  61. respond_with(@order, default_template: :show)
  62. else
  63. invalid_resource!(@order)
  64. end
  65. end
  66. def current
  67. @order = find_current_order
  68. if @order
  69. respond_with(@order, default_template: :show, locals: { root_object: @order })
  70. else
  71. head :no_content
  72. end
  73. end
  74. def mine
  75. if current_api_user.persisted?
  76. @orders = current_api_user.orders.reverse_chronological.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
  77. else
  78. render "spree/api/errors/unauthorized", status: :unauthorized
  79. end
  80. end
  81. def apply_coupon_code
  82. find_order
  83. authorize! :update, @order, order_token
  84. @order.coupon_code = params[:coupon_code]
  85. @handler = PromotionHandler::Coupon.new(@order).apply
  86. status = @handler.successful? ? 200 : 422
  87. render "spree/api/v1/promotions/handler", status: status
  88. end
  89. private
  90. def order_params
  91. if params[:order]
  92. normalize_params
  93. params.require(:order).permit(permitted_order_attributes)
  94. else
  95. {}
  96. end
  97. end
  98. def normalize_params
  99. params[:order][:payments_attributes] = params[:order].delete(:payments) if params[:order][:payments]
  100. params[:order][:shipments_attributes] = params[:order].delete(:shipments) if params[:order][:shipments]
  101. params[:order][:line_items_attributes] = params[:order].delete(:line_items) if params[:order][:line_items]
  102. params[:order][:ship_address_attributes] = params[:order].delete(:ship_address) if params[:order][:ship_address]
  103. params[:order][:bill_address_attributes] = params[:order].delete(:bill_address) if params[:order][:bill_address]
  104. end
  105. def find_order(lock = false)
  106. @order = Spree::Order.lock(lock).friendly.find(params[:id])
  107. end
  108. def find_current_order
  109. current_api_user ? current_api_user.orders.incomplete.order(:created_at).last : nil
  110. end
  111. def order_id
  112. super || params[:id]
  113. end
  114. end
  115. end
  116. end
  117. end