# frozen_string_literal: true
require "lazy_object"
require_relative "customer_fwd"
require_relative "ibr"
require_relative "trivial_backend_sgx_repo"
class Bwmsgsv2Repo
VOICEMAIL_TRANSCRIPTION_DISABLED = 0
def initialize(jid: CONFIG[:sgx], redis: LazyObject.new { REDIS }, **kwargs)
@jid = jid
@redis = redis
@trivial_repo = TrivialBackendSgxRepo.new(jid: jid, **kwargs)
end
def get(customer_id)
sgx = @trivial_repo.get(customer_id)
fetch_raw(sgx.from_jid).then do |(((ogm_url, fwd_time, fwd), trans_d), reg)|
sgx.with(
ogm_url: ogm_url,
fwd: CustomerFwd.for(uri: fwd, timeout: fwd_time),
transcription_enabled: !trans_d,
registered?: reg
)
end
end
def put_transcription_enabled(customer_id, enabled)
sgx = @trivial_repo.get(customer_id)
REDIS.setbit(
"catapult_settings_flags-#{sgx.from_jid}",
Bwmsgsv2Repo::VOICEMAIL_TRANSCRIPTION_DISABLED,
enabled ? 0 : 1
)
end
def put_fwd(customer_id, tel, customer_fwd)
sgx = @trivial_repo.get(customer_id)
EMPromise.all([
set_or_delete("catapult_fwd-#{tel}", customer_fwd.uri),
set_or_delete(
"catapult_fwd_timeout-#{sgx.from_jid}",
customer_fwd.timeout.to_i
)
]).then do
set_default_location(tel) if customer_fwd.v2_safe?
end
end
protected
def set_default_location(tel)
# Migrate location if needed
BandwidthIris::SipPeer.new(
site_id: CONFIG[:bandwidth_site],
id: CONFIG[:bandwidth_peer]
).move_tns([tel])
end
def set_or_delete(k, v)
if v.nil?
REDIS.del(k)
else
REDIS.set(k, v)
end
end
def fetch_raw(from_jid)
registration(from_jid).then do |r|
EMPromise.all([from_redis(from_jid, r ? r.phone : nil), r])
end
end
def registration(from_jid)
ibr = IBR.new(:get, @jid)
ibr.from = from_jid
IQ_MANAGER.write(ibr).catch { nil }.then do |result|
if result.respond_to?(:registered?) && result.registered?
result
else
false
end
end
end
def from_redis(from_jid, tel)
EMPromise.all([
@redis.mget(*[
"catapult_ogm_url-#{from_jid}",
"catapult_fwd_timeout-#{from_jid}",
("catapult_fwd-#{tel}" if tel)
].compact),
@redis.getbit(
"catapult_setting_flags-#{from_jid}", VOICEMAIL_TRANSCRIPTION_DISABLED
).then { |x| x == 1 }
])
end
end