MT#57085 fix /api/peeringroups form operations

* API now has own GroupAPI form with the correct fields for API
* db/form field name conversion is moved to the newly added
  resource_from_item() and process_form_resource() functions
* simplify code for GET/POST/PUT/PATCH operations

Change-Id: I99b76801a2894c8a4821513186796627db728189
mr11.4
Kirill Solomko 3 years ago
parent 8ebe7f735c
commit c5b288a9da

@ -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},

@ -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;

@ -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:

@ -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},
});

Loading…
Cancel
Save