# frozen_string_literal: true module PaymentServices # CartToOrderService class CartToOrderService attr_reader :error_messages def initialize(user_account) @user_account = user_account @cart = @user_account.cart end def call @error_messages = { errors: 'Cart is empty' } and return if @cart.product_carts.empty? order = Order.create(user_account_id: @user_account.id, public_id: generate_public_id) @cart.product_carts.pluck(:product_id, :quantity).each do |data| ProductOrder.create(order_id: order.id, product_id: data[0], quantity: data[1]) end order end private def generate_public_id public_id = SecureRandom.hex(12) public_id = SecureRandom.hex(12) while Order.exists?(public_id:) public_id end end end