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