bwmsgsv2_repo.rb

 1# frozen_string_literal: true
 2
 3require "lazy_object"
 4
 5require_relative "customer_fwd"
 6require_relative "ibr"
 7require_relative "trivial_backend_sgx_repo"
 8
 9class Bwmsgsv2Repo
10	VOICEMAIL_TRANSCRIPTION_DISABLED = 0
11
12	def initialize(jid: CONFIG[:sgx], redis: LazyObject.new { REDIS }, **kwargs)
13		@jid = jid
14		@redis = redis
15		@trivial_repo = TrivialBackendSgxRepo.new(jid: jid, **kwargs)
16	end
17
18	def get(customer_id)
19		sgx = @trivial_repo.get(customer_id)
20		fetch_raw(sgx.from_jid).then do |(((ogm_url, fwd_time, fwd), trans_d), reg)|
21			sgx.with({
22				ogm_url: ogm_url,
23				fwd: CustomerFwd.for(uri: fwd, timeout: fwd_time),
24				transcription_enabled: !trans_d,
25				registered?: reg
26			}.compact)
27		end
28	end
29
30protected
31
32	def fetch_raw(from_jid)
33		registration(from_jid).then do |r|
34			EMPromise.all([from_redis(from_jid, r ? r.phone : nil), r])
35		end
36	end
37
38	def registration(from_jid)
39		ibr = IBR.new(:get, @jid)
40		ibr.from = from_jid
41
42		IQ_MANAGER.write(ibr).catch { nil }.then do |result|
43			if result&.respond_to?(:registered?) && result&.registered?
44				result
45			else
46				false
47			end
48		end
49	end
50
51	def from_redis(from_jid, tel)
52		EMPromise.all([
53			@redis.mget(*[
54				"catapult_ogm_url-#{from_jid}",
55				"catapult_fwd_timeout-#{from_jid}",
56				("catapult_fwd-#{tel}" if tel)
57			].compact),
58			@redis.getbit(
59				"catapult_setting_flags-#{from_jid}", VOICEMAIL_TRANSCRIPTION_DISABLED
60			).then { |x| x == 1 }
61		])
62	end
63end