1# frozen_string_literal: true
2
3require "multibases"
4require "securerandom"
5
6class ParentCodeRepo
7 def initialize(redis=REDIS)
8 @redis = redis
9 end
10
11 def find(code)
12 @redis.hget("jmp_parent_codes", code).then do |parent_id|
13 (parent_id ? @redis.get("jmp_customer_trust_level-#{parent_id}") : nil)
14 .then do |tl|
15 tl == "Tomb" ? nil : parent_id
16 end
17 end
18 end
19
20 def find_or_create(customer_id)
21 @redis.get("jmp_customer_parent_code-#{customer_id}").then do |code|
22 next code if code
23
24 code = "p#{Multibases.pack('base32upper', SecureRandom.bytes(4))}"
25 EMPromise.all([
26 @redis.set("jmp_customer_parent_code-#{customer_id}", code),
27 @redis.hset("jmp_parent_codes", code, customer_id)
28 ]).then { code }
29 end
30 end
31end