diff --git a/lib/NGCP/Panel/Role/API.pm b/lib/NGCP/Panel/Role/API.pm index 2302ee6511..78f18aef0b 100644 --- a/lib/NGCP/Panel/Role/API.pm +++ b/lib/NGCP/Panel/Role/API.pm @@ -862,6 +862,46 @@ sub relation { } #------ /accessors --- +sub return_representation{ + my($self, $c, %params) = @_; + my($hal, $response, $item, $form, $preference) = @params{qw/hal response item form preference/}; + + $preference //= $self->require_preference($c); + return unless $preference; + $hal //= $self->hal_from_item($c, $item, $form); + $response //= HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( + $hal->http_headers, + ), $hal->as_json); + + if ('minimal' eq $preference) { + $c->response->status(HTTP_NO_CONTENT); + $c->response->header(Preference_Applied => 'return=minimal'); + $c->response->body(q()); + } else { + $c->response->headers($response->headers); + $c->response->header(Preference_Applied => 'return=representation'); + $c->response->body($response->content); + } +} +sub return_representation_post{ + my($self, $c, %params) = @_; + my($hal, $response, $item, $form, $preference) = @params{qw/hal response item form preference/}; + + $preference //= $self->require_preference($c); + return unless $preference; + $hal //= $self->hal_from_item($c, $item, $form); + $response //= HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( + $hal->http_headers, + ), $hal->as_json); + + $c->response->status(HTTP_CREATED); + $c->response->header(Location => sprintf('/%s%d', $c->request->path, $item->id)); + if ('minimal' eq $preference) { + $c->response->body(q()); + }else{ + $c->response->body($response->content); + } +} sub return_csv(){ diff --git a/lib/NGCP/Panel/Role/Entities.pm b/lib/NGCP/Panel/Role/Entities.pm index 525930295f..7a93bc5473 100644 --- a/lib/NGCP/Panel/Role/Entities.pm +++ b/lib/NGCP/Panel/Role/Entities.pm @@ -116,11 +116,11 @@ sub post { $guard->commit; - $c->response->status(HTTP_CREATED); - $c->response->header(Location => sprintf('/%s%d', $c->request->path, $item->id)); - $c->response->body(q()); + $self->return_representation_post($c, 'item' => $item, 'form' => $form ); + } return; } + sub auto :Private { my ($self, $c) = @_; diff --git a/lib/NGCP/Panel/Role/EntitiesItem.pm b/lib/NGCP/Panel/Role/EntitiesItem.pm index 5c87691ab7..5e533e7f96 100644 --- a/lib/NGCP/Panel/Role/EntitiesItem.pm +++ b/lib/NGCP/Panel/Role/EntitiesItem.pm @@ -32,7 +32,6 @@ sub set_config { ); } - sub get { my ($self, $c, $id) = @_; { @@ -80,20 +79,7 @@ sub patch { last unless $item; $guard->commit; - - if ('minimal' eq $preference) { - $c->response->status(HTTP_NO_CONTENT); - $c->response->header(Preference_Applied => 'return=minimal'); - $c->response->body(q()); - } else { - my $hal = $self->hal_from_item($c, $item, $form); - my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( - $hal->http_headers, - ), $hal->as_json); - $c->response->headers($response->headers); - $c->response->header(Preference_Applied => 'return=representation'); - $c->response->body($response->content); - } + $self->return_representation($c, 'item' => $item, 'form' => $form, 'preference' => $preference ); } return; } @@ -122,19 +108,7 @@ sub put { $guard->commit; - if ('minimal' eq $preference) { - $c->response->status(HTTP_NO_CONTENT); - $c->response->header(Preference_Applied => 'return=minimal'); - $c->response->body(q()); - } else { - my $hal = $self->hal_from_item($c, $item, $form); - my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( - $hal->http_headers, - ), $hal->as_json); - $c->response->headers($response->headers); - $c->response->header(Preference_Applied => 'return=representation'); - $c->response->body($response->content); - } + $self->return_representation($c, , 'item' => $item, 'form' => $form, 'preference' => $preference ); } return; } @@ -156,12 +130,14 @@ sub delete { } return; } + sub auto :Private { my ($self, $c) = @_; $self->set_body($c); $self->log_request($c); } + sub head { my ($self, $c, $id) = @_; $c->forward(qw(GET));