diff --git a/lib/CF2022/Controller/Orders.pm b/lib/CF2022/Controller/Orders.pm index 51b8df84961dc16f6f334df4f58232bc0a14b819..fa3e67752c821ff2c465ca589cbb026c53052021 100644 --- a/lib/CF2022/Controller/Orders.pm +++ b/lib/CF2022/Controller/Orders.pm @@ -13,6 +13,7 @@ sub create ($c ) { my $args = $c->req->json; my @products = @{ $args->{products} }; my @responses = @{ $args->{responses} }; + my $claims; my $group; my $url = sprintf ('%s/organizers/%s/events/%s/orders/', @@ -24,7 +25,7 @@ sub create ($c ) { if ( $args->{token} ) { $c->oauth_token($args->{token}); - my $claims = $c->oauth_claims; + $claims = $c->oauth_claims; return $c->error(403, 'Invalid token') if ! $claims; $group = $c->oauth_main_group; @@ -61,6 +62,7 @@ sub create ($c ) { email => $args->{email}, locale => 'en', payment_provider => 'manual', + testmode => $c->config->{pretix_testmode} ? 'true' : 'false', positions => [], fees => [], }; @@ -88,16 +90,45 @@ sub create ($c ) { push @{ $order->{positions} }, $item; } - my $ua = Mojo::UserAgent->new; + # kontrola duplicity + + my $exists = $c->schema->resultset('Order')->search({ + email => $order->{email}, + api => $url, + })->count; + + $exists ||= $c->schema->resultset('Order')->search({ + sso_uuid => $claims->{sub}, + api => $url, + })->count if $claims; -###### KONTROLA DUPLICITY + return $c->error(400, 'Duplicity' ) if $exists; + # odeslani do pretixu + + my $ua = Mojo::UserAgent->new; my $rc = $ua->post( $url, { Authorization => 'Token ' . $c->config->{pretix_token} }, json => $order - )->result->json; + )->result; - $c->render(json => $rc); + return $c->error(400, $rc->json) if ! $rc->is_success; + + # ukladani do lokalni databazi + + $c->schema->resultset('Order')->create({ + ip => $c->tx->remote_address, + sso_uuid => $claims->{sub}, + email => $order->{email}, + api => $url, + request => $order, + response => $rc->json, + }); + + $c->render( + status => 201, + json => $rc->json, + ); } 1;