From 28cb73e58e713da7fe5b76f828b871f5e5e1cdaa Mon Sep 17 00:00:00 2001 From: Flaviu Mates Date: Fri, 13 Sep 2019 00:18:39 +0300 Subject: [PATCH] TT#65651 - Display correct DBIx error on duplicate subscriber * Add check for provisioning subscriber webusername so the API trhows the correct error when encountering a duplicate * This implementation relies on the DBIx error to keep the database integrity Change-Id: Ica3e2673cead28759ad25f5edb3f7ca0f32e1c1e --- lib/NGCP/Panel/Controller/API/Subscribers.pm | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/Subscribers.pm b/lib/NGCP/Panel/Controller/API/Subscribers.pm index 31a50d7068..f7f1de7aea 100644 --- a/lib/NGCP/Panel/Controller/API/Subscribers.pm +++ b/lib/NGCP/Panel/Controller/API/Subscribers.pm @@ -406,10 +406,20 @@ sub POST :Allow { c => $c, schema => $schema, events_to_create => \@events_to_create, ); - } catch(DBIx::Class::Exception $e where { /Duplicate entry '([^']+)' for key 'number_idx'/ }) { - $e =~ /Duplicate entry '([^']+)' for key 'number_idx'/; - $c->log->error("failed to create subscriber, number " . $c->qs($1) . " already exists"); # TODO: user, message, trace, ... - $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '" . $1 . "' already exists.", "Number already exists."); + } catch(DBIx::Class::Exception $e where { /Duplicate entry '([^']+)' for key ('number_idx'|'webuser_dom_idx')/ }) { + $e =~ /Duplicate entry '([^']+)' for key ('number_idx'|'webuser_dom_idx')/; + my $log_error; + my @http_errors; + if ($2 eq '\'number_idx\'') { + $log_error = "failed to create subscriber, number " . $c->qs($1) . " already exists"; + @http_errors = ("Number '" . $1 . "' already exists.", "Number already exists."); + } + elsif ($2 eq '\'webuser_dom_idx\'') { + $log_error = "failed to create subscriber, webusername-domain combination " . $c->qs($1) . " already exists"; + @http_errors = ("Webusername-Domain combination '" . $1 . "' already exists.", "Webusername-Domain combination already exists."); + } + $c->log->error($log_error); # TODO: user, message, trace, ... + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, $http_errors[0], $http_errors[1]); last; } catch($e) { if (ref $error_info->{extended} eq 'HASH' && $error_info->{extended}->{response_code}) {