Detailed changes
@@ -19,7 +19,7 @@ class ParentCodeRepo
code = "p#{Multibases.pack('base32upper', SecureRandom.bytes(4))}"
EMPromise.all([
@redis.set("jmp_customer_group_code-#{customer_id}", code),
- @redis.hset("jmp_group_codes", code, customer_id)
+ @redis.hset("jmp_parent_codes", code, customer_id)
]).then { code }
end
end
@@ -429,7 +429,7 @@ class Registration
msg = if customer.balance.positive?
"Account balance not enough to cover the activation"
end
- new(customer, tel, error: msg)
+ new(customer, tel, error: msg, finish: Finish)
end
end
@@ -444,10 +444,12 @@ class Registration
required: true
}].freeze
- def initialize(customer, tel, error: nil, **)
+ def initialize(customer, tel, error: nil, finish: Finish, **)
@customer = customer
@tel = tel
@error = error
+ @finish = finish
+ @parent_code_repo = ParentCodeRepo.new(REDIS)
end
def add_form(reply)
@@ -484,8 +486,24 @@ class Registration
end
def verify(code)
- InvitesRepo.new(DB, REDIS).claim_code(customer_id, code) do
- @customer.activate_plan_starting_now
+ @parent_code_repo.find(code).then do |parent_customer_id|
+ if parent_customer_id
+ set_parent(parent_customer_id)
+ else
+ InvitesRepo.new(DB, REDIS).claim_code(customer_id, code) do
+ @customer.activate_plan_starting_now
+ end
+ end
+ end
+ end
+
+ def set_parent(parent_customer_id)
+ @customer = @customer.with_plan(
+ @customer.plan_name,
+ parent_customer_id: parent_customer_id
+ )
+ @customer.save_plan!.then do
+ self.class.for(@customer, @tel, finish: @finish)
end
end
end
@@ -749,6 +749,11 @@ class RegistrationTest < Minitest::Test
EMPromise.resolve(nil),
["jmp_invite_tries-test"]
)
+ Registration::Payment::InviteCode::REDIS.expect(
+ :hget,
+ EMPromise.resolve(nil),
+ ["jmp_parent_codes", "abc"]
+ )
Command::COMMAND_MANAGER.expect(
:write,
EMPromise.resolve(
@@ -782,6 +787,11 @@ class RegistrationTest < Minitest::Test
EMPromise.resolve(0),
["jmp_invite_tries-test"]
)
+ Registration::Payment::InviteCode::REDIS.expect(
+ :hget,
+ EMPromise.resolve(nil),
+ ["jmp_parent_codes", "abc"]
+ )
Registration::Payment::InviteCode::DB.expect(
:transaction,
[]
@@ -850,6 +860,11 @@ class RegistrationTest < Minitest::Test
EMPromise.resolve(0),
["jmp_invite_tries-test"]
)
+ Registration::Payment::InviteCode::REDIS.expect(
+ :hget,
+ EMPromise.resolve(nil),
+ ["jmp_parent_codes", "abc"]
+ )
Registration::Payment::InviteCode::DB.expect(
:transaction,
[]
@@ -918,6 +933,11 @@ class RegistrationTest < Minitest::Test
EMPromise.resolve(11),
["jmp_invite_tries-test"]
)
+ Registration::Payment::InviteCode::REDIS.expect(
+ :hget,
+ EMPromise.resolve(nil),
+ ["jmp_parent_codes", "abc"]
+ )
Command::COMMAND_MANAGER.expect(
:write,
EMPromise.resolve(