Sha256: c455aeb172ae47e74ecb3967d1bc1175436285d5b25a6f73ce2dd93b7617e04f

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module Decidim
  module Lausanne
    module Budgets
      # A command with all the business to checkout.
      class Checkout < Decidim::Lausanne::Budgets::Command
        # Public: Initializes the command.
        #
        # order - The current order for the user.
        def initialize(order)
          @order = order
        end

        # Executes the command. Broadcasts these events:
        #
        # - :ok when everything is valid.
        # - :invalid if the there is an error.
        #
        # Returns nothing.
        def call
          return broadcast(:invalid, order) unless checkout!

          broadcast(:ok, order)
        end

        private

          attr_reader :order

          def checkout!
            return unless order && order.valid?

            @order.with_lock do
              SendOrderSummaryJob.perform_later(@order)
              @order.checked_out_at = Time.current
              @order.save
            end
          end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-lausanne-budgets-0.1.0 app/commands/decidim/lausanne/budgets/checkout.rb