MT#6195 API: rewriterule/rewriteruleset: POST

agranig/selfsignup
Gerhard Jungwirth 11 years ago
parent 11e421dc08
commit ede3d43a42

@ -122,6 +122,63 @@ sub OPTIONS :Allow {
return;
}
sub POST :Allow {
my ($self, $c) = @_;
my $guard = $c->model('DB')->txn_scope_guard;
{
my $schema = $c->model('DB');
my $resource = $self->get_valid_post_data(
c => $c,
media_type => 'application/json',
);
last unless $resource;
unless(defined $resource->{reseller_id}) {
try {
$resource->{reseller_id} = $c->user->contract->contact->reseller_id;
}
}
my $reseller = $c->model('DB')->resultset('resellers')->find($resource->{reseller_id});
unless($reseller) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'reseller_id', doesn't exist.");
last;
}
my $form = $self->get_form($c);
last unless $self->validate_form(
c => $c,
resource => $resource,
form => $form,
);
my $ruleset_test = $schema->resultset('voip_rewrite_rule_sets')->search_rs({
name => $resource->{name}
})->first;
if ($ruleset_test) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Ruleset with this 'name' already exists.");
last;
}
my $ruleset;
try {
$ruleset = $schema->resultset('voip_rewrite_rule_sets')->create($resource);
} catch($e) {
$c->log->error("failed to create rewriteruleset: $e"); # TODO: user, message, trace, ...
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create rewriteruleset.");
last;
}
$guard->commit;
$c->response->status(HTTP_CREATED);
$c->response->header(Location => sprintf('/%s%d', $c->request->path, $ruleset->id));
$c->response->body(q());
}
return;
}
sub end : Private {
my ($self, $c) = @_;

@ -127,6 +127,64 @@ sub OPTIONS :Allow {
return;
}
sub POST :Allow {
my ($self, $c) = @_;
my $guard = $c->model('DB')->txn_scope_guard;
{
my $schema = $c->model('DB');
my $resource = $self->get_valid_post_data(
c => $c,
media_type => 'application/json',
);
last unless $resource;
unless($resource->{direction} && ($resource->{direction} eq "in" || $resource->{direction} eq "out") ) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'direction', must be 'in' or 'out'.");
last;
}
unless($resource->{field} && ($resource->{field} eq "callee" || $resource->{field} eq "caller") ) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'field', must be 'callee' or 'caller'.");
last;
}
my $set_id = delete $resource->{set_id}; # keep this, cause formhandler doesn't know it
my $form = $self->get_form($c);
last unless $self->validate_form(
c => $c,
resource => $resource,
form => $form,
);
my $rule;
unless(defined $set_id) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Required: 'set_id'");
last;
}
my $ruleset = $schema->resultset('voip_rewrite_rule_sets')->find($set_id);
unless($ruleset) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'set_id'.");
last;
}
$resource->{set_id} = $ruleset->id;
try {
$rule = $schema->resultset('voip_rewrite_rules')->create($resource);
} catch($e) {
$c->log->error("failed to create rewriterule: $e"); # TODO: user, message, trace, ...
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create rewriterule.");
last;
}
$guard->commit;
$c->response->status(HTTP_CREATED);
$c->response->header(Location => sprintf('/%s%d', $c->request->path, $rule->id));
$c->response->body(q());
}
return;
}
sub end : Private {
my ($self, $c) = @_;

Loading…
Cancel
Save