MT#55871 /api/subscribers optimise GET alias_numbers

* "alias_numbers" array when the resource is prepared is
  created directly from the resultset, avoiding 'foreach' loops and
  conditions.
  This improves performance on ~8000 voip_numbers from ~35 seconds
  to ~3 seconds.
* is_devid is now always present in the "alias_numbers" object,
  and it's =0 if there is no related entry in
  provisioning.voip_dbaliases

Change-Id: Ia05b26208f3fec3a9b2203aafe9b4c09b98ca44d
mr11.2
Kirill Solomko 3 years ago
parent 846b60ad97
commit 0c4deaaad0

@ -128,23 +128,19 @@ sub resource_from_item {
$resource{primary_number}->{sn} = $item->primary_number->sn; $resource{primary_number}->{sn} = $item->primary_number->sn;
$resource{primary_number}->{number_id} = int($item->primary_number->id); $resource{primary_number}->{number_id} = int($item->primary_number->id);
} }
if($item->voip_numbers->count) {
$resource{alias_numbers} = []; @{$resource{alias_numbers}} = $item->voip_numbers->search({
foreach my $n($item->voip_numbers->all) { -or => [
my $alias = { 'voip_dbalias.is_primary' => 0,
cc => $n->cc, 'voip_dbalias.is_primary' => undef,
ac => $n->ac, ],
sn => $n->sn, },
number_id => int($n->id), {
}; select => ['cc','ac','sn','id',\'COALESCE(voip_dbalias.is_devid,0)'],
next if($resource{primary_number} && as => ['cc','ac','sn','number_id','is_devid'],
compare($resource{primary_number}, $alias)); join => 'voip_dbalias',
if (defined $n->voip_dbalias) { result_class => 'DBIx::Class::ResultClass::HashRefInflator',
$alias->{is_devid} = bool $n->voip_dbalias->is_devid; })->all;
}
push @{ $resource{alias_numbers} }, $alias;
}
}
$pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'display_name', c => $c, attribute => 'display_name',

Loading…
Cancel
Save