From 4e4d1245022471fb17ce8316ab2c0a6bb549c690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Geonizeli?= Date: Sun, 15 Aug 2021 19:46:54 -0300 Subject: [PATCH] create user balances after register --- app/models/user.rb | 8 +++++++ app/services/create_user_balances.rb | 36 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/services/create_user_balances.rb 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