# frozen_string_literal: true module Payment # PaymentService class PaymentService attr_reader :error_messages def initialize(params, user_account) @user_account = user_account @params = params @order = Order.new(params.except(:card_id)) @card_id = params[:card_id] @order = CartToOrderService.new(@user_account).call end def call payment = Payment.new(order_id: @order.id, card_id: @card_id, total:) @error_messages = { errors: @payment.errors.as_json } and return unless payment.save @order.update(payment_id: payment.id) user_account.cart.product_carts.destroy_all @order end private def total total = 0 @order.product_orders.joins(:product).select( 'product_orders.*, products.bulk_price AS bulk_price, products.unitary_price AS unitary_price' ).each do |product_order| total += if product_order.quantity < 5 unitary_price * product_order.quantity else bulk_price * product_order.quantity end end end end end