diff --git a/lib/NGCP/Panel/Controller/API/PeeringGroups.pm b/lib/NGCP/Panel/Controller/API/PeeringGroups.pm index beb3d0c47e..ff6b4a3445 100644 --- a/lib/NGCP/Panel/Controller/API/PeeringGroups.pm +++ b/lib/NGCP/Panel/Controller/API/PeeringGroups.pm @@ -111,8 +111,10 @@ sub POST :Allow { resource => $resource, form => $form, ); - $resource = $form->custom_get_values; last unless $resource; + + $resource = $self->process_form_resource($c, undef, undef, $resource, $form); + my $item; my $dup_item = $c->model('DB')->resultset('voip_peer_groups')->find({ name => $resource->{name}, diff --git a/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm b/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm index f6e0de5f72..25a98b46a2 100644 --- a/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm +++ b/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm @@ -59,11 +59,12 @@ sub PATCH :Allow { my $item = $self->item_by_id($c, $id); last unless $self->resource_exists($c, peeringgroup => $item); - my $old_resource = { $item->get_inflated_columns }; + + my $form = $self->get_form($c); + my $old_resource = $self->resource_from_item($c, $item, $form); my $resource = $self->apply_patch($c, $old_resource, $json); last unless $resource; - my $form = $self->get_form($c); $item = $self->update_item($c, $item, $old_resource, $resource, $form); last unless $item; @@ -89,9 +90,10 @@ sub PUT :Allow { media_type => 'application/json', ); last unless $resource; - my $old_resource = { $item->get_inflated_columns }; my $form = $self->get_form($c); + my $old_resource = $self->resource_from_item($c, $item, $form); + $item = $self->update_item($c, $item, $old_resource, $resource, $form); last unless $item; diff --git a/lib/NGCP/Panel/Form/Peering/GroupAPI.pm b/lib/NGCP/Panel/Form/Peering/GroupAPI.pm new file mode 100644 index 0000000000..e683febb6e --- /dev/null +++ b/lib/NGCP/Panel/Form/Peering/GroupAPI.pm @@ -0,0 +1,51 @@ +package NGCP::Panel::Form::Peering::GroupAPI; + +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler'; + +has_field 'contract_id' => ( + type => 'PosInteger', + required => 1, + element_attr => { + rel => ['tooltip'], + title => ['The contract used for this peering group.'] + }, +); + +has_field 'name' => ( + type => 'Text', + required => 1, + element_attr => { + rel => ['tooltip'], + title => ['Peering group name.'] + }, +); + +has_field 'priority' => ( + type => 'IntRange', + required => 0, + range_start => '1', + range_end => '9', +); + +has_field 'time_set_id' => ( + type => 'PosInteger', + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['By specifying a TimeSet the periods during which this group is active can be restricted.'] + }, +); + +has_field 'description' => ( + type => 'Text', + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['Peering group description'], + }, +); + + +1; +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Role/API/PeeringGroups.pm b/lib/NGCP/Panel/Role/API/PeeringGroups.pm index 683d2ead14..03414af814 100644 --- a/lib/NGCP/Panel/Role/API/PeeringGroups.pm +++ b/lib/NGCP/Panel/Role/API/PeeringGroups.pm @@ -24,13 +24,12 @@ sub _item_rs { sub get_form { my ($self, $c) = @_; - return NGCP::Panel::Form::get("NGCP::Panel::Form::Peering::Group", $c); + return NGCP::Panel::Form::get("NGCP::Panel::Form::Peering::GroupAPI", $c); } sub hal_from_item { my ($self, $c, $item, $form) = @_; - my %resource = $item->get_inflated_columns; - $resource{contract_id} = delete $resource{peering_contract_id}; + my $resource = $self->resource_from_item($c, $item); my $hal = Data::HAL->new( links => [ Data::HAL::Link->new( @@ -53,15 +52,15 @@ sub hal_from_item { $self->validate_form( c => $c, - resource => \%resource, + resource => $resource, form => $form, run => 0, ); - $resource{id} = int($item->id); + $resource->{id} = int($item->id); - $self->expand_fields($c, \%resource); - $hal->resource({%resource}); + $self->expand_fields($c, $resource); + $hal->resource($resource); return $hal; } @@ -71,6 +70,23 @@ sub item_by_id { return $item_rs->find($id); } +sub resource_from_item { + my ($self, $c, $item, $form) = @_; + + my $resource = { $item->get_inflated_columns }; + $resource->{contract_id} = delete $resource->{peering_contract_id}; + + return $resource; +} + +sub process_form_resource { + my ($self, $c, $item, $old_resource, $resource, $form) = @_; + + $resource->{peering_contract_id} = delete $resource->{contract_id}; + + return $resource; +} + sub update_item { my ($self, $c, $item, $old_resource, $resource, $form) = @_; @@ -80,9 +96,10 @@ sub update_item { form => $form, resource => $resource, ); - $resource = $form->custom_get_values; last unless $resource; + $resource = $self->process_form_resource($c, $item, $old_resource, $resource, $form); + my $dup_item = $c->model('DB')->resultset('voip_peer_groups')->find({ name => $resource->{name}, });