TT#40503 Add journal actions to entities FW

Change-Id: Ia0d51f246756f649dc440cde7b4fb0e8056d3ced
changes/67/22467/35
Irina Peshinskaya 7 years ago
parent 650369ceb9
commit ffd1b487bf

@ -1069,7 +1069,8 @@ sub hal_from_item {
if(!$form){
($form) = $self->get_form($c);
}
my $resource = $self->resource_from_item($c, $item, $form, $params);
my $resource = $params->{resource};
$resource //= $self->resource_from_item($c, $item, $form, $params);
$resource = $self->process_hal_resource($c, $item, $resource, $form, $params);
return unless $resource;
my $links = $self->hal_links($c, $item, $resource, $form, $params) // [];

@ -256,7 +256,7 @@ sub post {
resource_media_type => $method_config->{ResourceContentType},
);
last unless $resource;
my ($item,$data_processed_result);
my ($item,$data_processed_result,$hal);
if (!$non_json_data || !$data) {
delete $resource->{purge_existing};
last unless $self->pre_process_form_resource($c, undef, undef, $resource, $form, $process_extras);
@ -272,6 +272,9 @@ sub post {
$item = $self->create_item($c, $resource, $form, $process_extras);
last unless $item || $self->get_config('no_item_created');
$hal = $self->get_journal_item_hal($c, $item, { form => $form });
last unless $self->add_journal_item_hal($c, { hal => $hal });
} else {
try {
#$processed_ok(array), $processed_failed(array), $info, $error
@ -295,6 +298,7 @@ sub post {
return if defined $c->stash->{api_error_message};
$self->return_representation_post($c,
'hal' => $hal,
'item' => $item,
'form' => $form
);

@ -248,12 +248,18 @@ sub patch {
($item, $form, $process_extras) = $self->update_item($c, $item, $old_resource, $resource, $form, $process_extras );
last unless $item;
my $hal = $self->get_journal_item_hal($c, $item, { form => $form });
last unless $self->add_journal_item_hal($c, { hal => $hal });
$self->complete_transaction($c);
$self->post_process_commit($c, 'patch', $item, $old_resource, $resource, $form, $process_extras);
$self->return_representation($c,
'item' => $item,
'form' => $form,
#hal may be empty if we don't need it for journal.
#Then it will be taken from item and form
'hal' => $hal,
'preference' => $preference,
);
}
@ -289,9 +295,15 @@ sub put {
($item, $form, $process_extras) = $self->update_item($c, $item, $old_resource, $resource, $form, $process_extras );
last unless $item;
my $hal = $self->get_journal_item_hal($c, $item, { form => $form });
last unless $self->add_journal_item_hal($c, { hal => $hal });
$self->complete_transaction($c);
$self->post_process_commit($c, 'put', $item, $old_resource, $resource, $form, $process_extras);
$self->return_representation($c,
#hal may be empty if we don't need it for journal.
#Then it will be taken from item and form
'hal' => $hal,
'item' => $item,
'form' => $form,
'preference' => $preference,
@ -308,7 +320,11 @@ sub delete { ## no critic (ProhibitBuiltinHomonyms)
my $item = $self->item_by_id_valid($c, $id);
last unless $item;
$self->delete_item($c, $item );
my $hal = $self->get_journal_item_hal($c, $item);
#here we left space for information that checking failed and we decided not to delete item
if ($self->delete_item($c, $item)) {
$self->add_journal_item_hal($c, { hal => $hal });
}
$self->complete_transaction($c);
$self->post_process_commit($c, 'delete', $item);
@ -322,6 +338,7 @@ sub delete { ## no critic (ProhibitBuiltinHomonyms)
sub delete_item{
my($self, $c, $item) = @_;
$item->delete();
return 1;
}
sub options {

@ -18,6 +18,63 @@ sub add_delete_journal_item_hal {
my ($self,$c,@args) = @_;
return NGCP::Panel::Utils::Journal::add_journal_item_hal($self,$c,NGCP::Panel::Utils::Journal::DELETE_JOURNAL_OP,@args);
}
sub get_journal_operation_config {
my ($self, $c, $operation_spec, $reload) = @_;
my $operation;
if (!$operation_spec) {
my $method = uc($c->request->method);
if ($method =~ /^(PATCH|PUT)$/) {
$operation_spec = 'update';
} elsif ($method eq 'POST') {
$operation_spec = 'create';
} elsif ($method eq 'DELETE') {
$operation_spec = 'delete';
}
}
if ($operation_spec eq 'create') {
$operation = NGCP::Panel::Utils::Journal::CREATE_JOURNAL_OP;
} elsif ($operation_spec eq 'update') {
$operation = NGCP::Panel::Utils::Journal::UPDATE_JOURNAL_OP;
} elsif ($operation_spec eq 'delete') {
$operation = NGCP::Panel::Utils::Journal::DELETE_JOURNAL_OP;
}
return $c->stash->{journal}->{$operation}, $operation
if $c->stash->{journal}->{$operation} && !$reload;
my $cfg = NGCP::Panel::Utils::Journal::get_api_journal_op_config($c->config, $self->resource_name, $operation);
$c->stash( journal => { $operation => $cfg } );
return $cfg, $operation;
}
#is supposed to use only for delete operations - we take hal before delete item
sub get_journal_item_hal {
my ($self, $c, $item, $params) = @_;
my ($operation_spec, $form) = @$params{qw/operation form/};
my ($cfg, $operation) = $self->get_journal_operation_config($c, $operation_spec);
if ($cfg->{operation_enabled}) {
$item->discard_changes;
#we may pass resource inparams to don't perform expensive get_resource_from_item operation
return $self->hal_from_item($c, $item, $form, $params);
}
return;
}
sub add_journal_item_hal {
my ($self, $c, $params) = @_;
my ($operation_spec, $item, $form, $hal) = @$params{qw/operation item form hal/};
my ($cfg, $operation) = $self->get_journal_operation_config($c, $operation_spec);
if ($cfg->{operation_enabled}) {
#for delete operation we will pass presaved hal
if (!$hal) {
$item->discard_changes;
#we may pass resource inparams to don't perform expensive get_resource_from_item operation
$hal = $self->hal_from_item($c, $item, $form, $params);
}
return NGCP::Panel::Utils::Journal::add_journal_item_hal($self, $c, $operation, $hal);
} else {
return 1;
}
}
sub get_journal_action_config {
my ($class,$resource_name,$action_template) = @_;

Loading…
Cancel
Save