MT#7039 API: link subscriberregistrations

- Properly join voip_subscribers and voip_domains
- Link relations to subscriber
ipeshinskaya/InvoiceTemplate5
Andreas Granig 11 years ago
parent 74d3458e66
commit 1cc0aa69f4

@ -27,6 +27,25 @@ class_has 'query_params' => (
is => 'ro',
isa => 'ArrayRef',
default => sub {[
{
param => 'subscriber_id',
description => 'Filter for registrations of a specific subscriber',
query => {
first => sub {
my $q = shift;
my $h =
return {
'voip_subscriber.id' => $q,
'domain.id' => { -ident => 'subscriber.domain_id' },
};
},
second => sub {
return {
join => [{ subscriber => 'voip_subscriber' }, 'domain']
};
},
},
},
]},
);
@ -71,7 +90,9 @@ sub GET :Allow {
my (@embedded, @links);
my $form = $self->get_form($c);
for my $item ($items->search({}, {order_by => {-asc => 'me.id'}})->all) {
push @embedded, $self->hal_from_item($c, $item, $form);
my $halitem = $self->hal_from_item($c, $item, $form);
next unless($halitem);
push @embedded, $halitem;
push @links, Data::HAL::Link->new(
relation => 'ngcp:'.$self->resource_name,
href => sprintf('/%s%d', $c->request->path, $item->id),

@ -48,6 +48,10 @@ sub GET :Allow {
last unless $self->resource_exists($c, subscriberregistration => $item);
my $hal = $self->hal_from_item($c, $item);
unless($hal) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid location entry");
last;
}
my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new(
(map { # XXX Data::HAL must be able to generate links with multiple relations

@ -17,7 +17,15 @@ use NGCP::Panel::Utils::Kamailio;
sub item_rs {
my ($self, $c) = @_;
my $item_rs = $c->model('DB')->resultset('location');
my @joins = ('subscriber');
if($c->config->{features}->{multidomain}) {
push @joins, 'domain';
}
my $item_rs = $c->model('DB')->resultset('location')->search({
},{
join => \@joins,
});
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
$item_rs = $item_rs->search({
@ -38,6 +46,7 @@ sub hal_from_item {
my ($self, $c, $item, $form) = @_;
$form //= $self->get_form($c);
my $resource = $self->resource_from_item($c, $item, $form);
return unless $resource;
my $hal = Data::HAL->new(
links => [
@ -97,14 +106,13 @@ sub subscriber_from_item {
});
if($c->config->{features}->{multidomain}) {
$sub_rs = $sub_rs->search({
'domain.domain' => $item->domain,
'domain.domain' => $item->domain->domain,
}, {
join => 'domain',
});
}
my $sub = $sub_rs->first;
unless($sub && $sub->provisioning_voip_subscriber) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "No subscriber for location entry found");
return;
}
return $sub;

@ -108,7 +108,8 @@ sub hal_from_item {
($item->provisioning_voip_subscriber && $item->provisioning_voip_subscriber->profile_id) ? (Data::HAL::Link->new(relation => 'ngcp:subscriberprofiles', href => sprintf("/api/subscriberprofiles/%d", $item->provisioning_voip_subscriber->profile_id))) : (),
Data::HAL::Link->new(relation => 'ngcp:calls', href => sprintf("/api/calls/?subscriber_id=%d", $item->id)),
Data::HAL::Link->new(relation => 'ngcp:voicemailsettings', href => sprintf("/api/voicemailsettings/%d", $item->id)),
#Data::HAL::Link->new(relation => 'ngcp:registrations', href => sprintf("/api/registrations/%d", $item->contract->id)),
Data::HAL::Link->new(relation => 'ngcp:subscriberregistrations', href => sprintf("/api/subscriberregistrations/?subscriber_id=%d", $item->id)),
Data::HAL::Link->new(relation => 'ngcp:reminders', href => sprintf("/api/reminders/?subscriber_id=%d", $item->id)),
#Data::HAL::Link->new(relation => 'ngcp:trustedsources', href => sprintf("/api/trustedsources/%d", $item->contract->id)),
],
relation => 'ngcp:'.$self->resource_name,

Loading…
Cancel
Save