MT#17495 Fix API doc for subscriber - no customer_id for update

Change-Id: I9f60a476d33a992ec8d31db75ed4bcf98207bcdb
changes/21/5121/8
Irina Peshinskaya 10 years ago
parent 2120779d93
commit b0be8e2aac

@ -156,6 +156,25 @@ sub GET : Allow {
$sorting_cols = [$item_rs->result_source->columns];
}
my ($form_fields,$form_fields_upload) = $form ? $self->get_collection_properties($form) : ([],[]);
my $documentation_sample = {} ;
my $documentation_sample_process = sub{
my $s = shift;
$s = to_json($s, {pretty => 1}) =~ s/(^\s*{\s*)|(\s*}\s*$)//rg =~ s/\n /\n/rg;
return $s;
};
if($full_mod->can('documentation_sample')){
$documentation_sample->{sample_orig}->{default} = $full_mod->documentation_sample;
$documentation_sample->{sample}->{default} = $documentation_sample_process->($documentation_sample->{sample_orig}->{default});
}
foreach my $action (qw/create update/){
my $method = 'documentation_sample_'.$action;
if($full_mod->can($method)){
$documentation_sample->{sample_orig}->{$action} = $full_mod->$method;
$documentation_sample->{sample}->{$action} = $documentation_sample_process->($documentation_sample->{sample_orig}->{$action});
}
}
$c->stash->{collections}->{$rel} = {
name => $mod,
description => $full_mod->api_description,
@ -168,9 +187,7 @@ sub GET : Allow {
sorting_cols => $sorting_cols,
uri => $uri,
properties => ( $full_mod->can('properties') ? $full_mod->properties : {} ),#
sample => $full_mod->can('documentation_sample') # generate pretty json, but without outer brackets (this is tricky though)
? to_json($full_mod->documentation_sample, {pretty => 1}) =~ s/(^\s*{\s*)|(\s*}\s*$)//rg =~ s/\n /\n/rg
: undef,
%$documentation_sample,
journal_resource_config => $journal_resource_config,
};

@ -29,6 +29,12 @@ sub api_description {
'XMPP and place and receive calls via SIP. A subscriber always belongs to a '.
'<a href="#customers">Customer</a> and is placed inside a <a href="#domains">Domain</a>.';
}
sub documentation_sample_update {
return { "domain_id" => 4,
"password" => "test",
"username" => "test",
};
}
sub query_params {
return [

@ -504,6 +504,10 @@ sub update_item {
return;
}
if($resource->{customer_id} && ( $resource->{customer_id} != $subscriber->contract->id ) ){
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "customer_id can't be changed.");
return;
}
if($subscriber->status ne $resource->{status}) {
if($resource->{status} eq 'locked') {

@ -12,34 +12,41 @@
[% col.description %]
[%-
#props_plain = '"id" : 1';
props_creation_first_flag = 1;
FOREACH p IN col.fields;
NEXT IF p.types.0 == 'null';
NEXT IF p.type_original == 'Upload';
IF props_creation_first_flag;
props_creation_first_flag = 0;
[% MACRO get_props_plain BLOCK ;
IF col.sample.default || (action && col.sample.${action});
IF col.sample.default && (!action || !col.sample.${action});
props_plain = col.sample.default _ "\n";
ELSE;
props_plain = props_plain _ ",\n";
props_plain = col.sample.${action} _ "\n";
END;
IF p.types.0 == "Number";
val = 4;
ELSIF p.types.0 == "String";
val = '"test"';
ELSIF p.types.0 == "Boolean";
val = 'true';
ELSIF p.types.0 == "Array";
val = '[]';
ELSE;
val = '"missing"';
ELSE;
#props_plain = '"id" : 1';
props_creation_first_flag = 1;
FOREACH p IN col.fields;
NEXT IF p.types.0 == 'null';
NEXT IF p.type_original == 'Upload';
IF props_creation_first_flag;
props_creation_first_flag = 0;
ELSE;
props_plain = props_plain _ ",\n";
END;
IF p.types.0 == "Number";
val = 4;
ELSIF p.types.0 == "String";
val = '"test"';
ELSIF p.types.0 == "Boolean";
val = 'true';
ELSIF p.types.0 == "Array";
val = '[]';
ELSE;
val = '"missing"';
END;
props_plain = props_plain _ '"' _ p.name _ '" : ' _ val;
END;
props_plain = props_plain _ '"' _ p.name _ '" : ' _ val;
END;
props_plain = props_plain _ "\n";
IF col.sample;
props_plain = col.sample _ "\n";
props_plain = props_plain _ "\n";
END;
props_plain;
END;
%]
[%-
FOREACH p IN col.uploads;
@ -129,7 +136,7 @@ Accept-Post: application/hal+json; profile="http://purl.org/sipwise/ngcp-api/#re
cmd = 'curl -i -X GET -H \'Connection: close\' --cert NGCP-API-client-certificate.pem --cacert ca-cert.pem \'https://example.org:1443/api/' _ id _ '/?page=1&rows=1\'';
INCLUDE helpers/api_command.tt cmd=cmd level=level+3;
props = props_plain | indent(12);
props = get_props_plain() | indent(12);
request =
'GET /api/' _ id _ '/?page=1&rows=1 HTTP/1.1';
@ -197,7 +204,7 @@ Content-Type: application/hal+json; profile="http://purl.org/sipwise/ngcp-api/"
cmd = 'curl -i -X GET -H \'Connection: close\' --cert NGCP-API-client-certificate.pem --cacert ca-cert.pem \'https://example.org:1443/api/' _ id _ '/1\'';
INCLUDE helpers/api_command.tt cmd=cmd level=level+3;
props = props_plain | indent(3);
props = get_props_plain() | indent(3);
request =
'GET /api/' _ id _ '/1 HTTP/1.1';
@ -233,38 +240,42 @@ Link: </api/' _ id _ '/1>; rel="item self"
[% END -%]
[% MACRO request_macro BLOCK ;
props = props_plain | collapse;
IF http_request == 'POST' ;
action = 'create';
response = 'HTTP/1.1 201 Created';
IF !col.properties.asynchronous ;
response = response _ '
Location: /api/' _ id _ '/2' ;
END ;
ELSIF http_request == 'PUT' ;
action = 'update';
item_id = 2;
request_headers = "\nPrefer: return=minimal";
request_headers_form = ' -H \'Prefer: return=minimal\'';
response =
'HTTP/1.1 204 No Content
Preference-Applied: return=minimal';
END;
props = get_props_plain( action => action) | collapse;
uploads_form = uploads_form | collapse;
content_type = col.config.action.${http_request}.ContentType.0 ? col.config.action.${http_request}.ContentType.0 : 'application/json';
IF content_type == 'multipart/form-data' ;
request_data_plain = '\'json={' _ props _ '}\' ';
props = props_plain | indent(6);
props = get_props_plain( action => action) | indent(6);
uploads_data = uploads_data | indent(3);
request_data = "{\n json => {\n" _ props _ ( uploads_data ? " }\n" _ uploads_data : "" ) _ "\n}";
request_form = ' --form ' _ request_data_plain _ uploads_form ;
ELSE;
request_data_plain = '\'{' _ props _ '}\'';
props = props_plain | indent(3);
props = get_props_plain( action => action) | indent(3);
uploads_data = uploads_data | indent(0);
request_data = "{\n" _ props _ ( uploads_data ? "\n" _ uploads_data : "" ) _ "}";
request_form = ' --data-binary ' _ request_data_plain _ uploads_form;
END;
IF http_request == 'POST' ;
response = 'HTTP/1.1 201 Created';
IF !col.properties.asynchronous ;
response = response _ '
Location: /api/' _ id _ '/2' ;
END ;
ELSIF http_request == 'PUT' ;
item_id = 2;
request_headers = "\nPrefer: return=minimal";
request_headers_form = ' -H \'Prefer: return=minimal\'';
response =
'HTTP/1.1 204 No Content
Preference-Applied: return=minimal';
END;
cmd = 'curl -i -X ' _ http_request _ ' -H \'Connection: close\' -H \'Content-Type: ' _ content_type _ '\'' _ request_headers_form _ ' --cert NGCP-API-client-certificate.pem --cacert ca-cert.pem \'https://example.org:1443/api/' _ id _ '/' _ item_id _ '\' ' _ request_form ;
@ -303,6 +314,7 @@ END%]
[%
props = ''; rem = 0; rep = 0;
FOREACH p IN col.fields;
NEXT IF col.sample_orig && col.sample_orig.update && ( col.sample_orig.update != 'default' ) && ( !col.sample_orig.update.${p.name} );
type = p.types.0;
IF type == 'null';
NEXT IF rem >= 1;
@ -365,6 +377,7 @@ END%]
[%
props = ''; rem = 0; rep = 0;
FOREACH p IN col.fields;
NEXT IF col.sample_orig && col.sample_orig.update && ( !col.sample_orig.update.${p.name} );
type = p.types.0;
IF type == 'null';
NEXT IF rem >= 1;

Loading…
Cancel
Save