parent_code_repo.rb

 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