diff --git a/app/models/user.rb b/app/models/user.rb index 26d827a..88d48b1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -34,4 +34,12 @@ class User < ApplicationRecord def full_name "#{first_name} #{last_name}" end + + after_create do + create_balances + end + + def create_balances + CreateUserBalances.new(self).call + end end diff --git a/app/services/create_user_balances.rb b/app/services/create_user_balances.rb new file mode 100644 index 0000000..885693f --- /dev/null +++ b/app/services/create_user_balances.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true +class CreateUserBalances + attr_reader :user + + def initialize(user) + @user = user + end + + def call + return nil if Rails.env.test? + + ActiveRecord::Base.transaction do + create_fiat_balance + create_balances + end + end + + private + + def create_fiat_balance + FiatBalance.find_or_create_by!( + user_id: user.id + ) + end + + def create_balances + Currency.in_batches.each do |relation| + relation.each do |currency| + Balance.find_or_create_by( + user_id: user.id, + currency_id: currency.id, + ) + end + end + end +end