Sha256: a31c9e195a4c04b0d3f07e269244faecad6eb34736d482faea3973e1ea12ee1f

Contents?: true

Size: 1.86 KB

Versions: 13

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module Spree
  module Api
    class LineItemsController < Spree::Api::BaseController
      before_action :load_order, only: [:create, :update, :destroy]
      around_action :lock_order, only: [:create, :update, :destroy]

      def new
      end

      def create
        variant = Spree::Variant.find(params[:line_item][:variant_id])
        begin
          @line_item = @order.contents.add(
            variant,
            params[:line_item][:quantity] || 1,
            options: line_item_params[:options].to_h
          )
          respond_with(@line_item, status: 201, default_template: :show)
        rescue ActiveRecord::RecordInvalid => error
          invalid_resource!(error.record)
        end
      end

      def update
        @line_item = find_line_item
        if @order.contents.update_cart(line_items_attributes)
          @line_item.reload
          respond_with(@line_item, default_template: :show)
        else
          invalid_resource!(@line_item)
        end
      end

      def destroy
        @line_item = find_line_item
        @order.contents.remove_line_item(@line_item)
        respond_with(@line_item, status: 204)
      end

      private

      def load_order
        @order ||= Spree::Order.includes(:line_items).find_by!(number: order_id)
        authorize! :update, @order, order_token
      end

      def find_line_item
        id = params[:id].to_i
        @order.line_items.detect { |line_item| line_item.id == id } ||
          raise(ActiveRecord::RecordNotFound)
      end

      def line_items_attributes
        { line_items_attributes: {
            id: params[:id],
            quantity: params[:line_item][:quantity],
            options: line_item_params[:options] || {}
        } }
      end

      def line_item_params
        params.require(:line_item).permit(permitted_line_item_attributes)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
solidus_api-4.4.2 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.4.1 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.4.0 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.3.4 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.2.4 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.3.3 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.3.2 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.3.1 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.3.0 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.2.3 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.2.2 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.2.1 app/controllers/spree/api/line_items_controller.rb
solidus_api-4.2.0 app/controllers/spree/api/line_items_controller.rb