our $VERSION = '0.1';
our @EXPORT = qw( &get_database &get_lists_version &increment_lists_version
- &invalid_input );
+ &invalid_input exception );
use Dancer2::Plugin::DBIC;
}
sub invalid_input($details = undef) {
- status 400;
- return "Invalid input" . ( defined($details) ? " ($details)" : '' );
+ return exception 400,
+ "Invalid input" . ( defined($details) ? " ($details)" : '' );
+}
+
+sub exception($http_code, $text) {
+ status $http_code;
+ return { exception => $text };
}
use experimental 'signatures';
set charset => 'UTF-8';
-set serializer => 'JSON';
-set content_type => 'application/json';
-
+set serializer => 'JSON';
# get the URI for the list of shopping lists
get '/' => sub {
my $name = $req->{name};
unless ($name) {
- status 400;
- content_type 'text/plain';
- return "Missing list name";
+ return exception 400, "Missing list name";
}
my $dbh = get_database;
unless ($list) {
$dbh->txn_commit;
- status 404;
- content_type 'text/plain';
- return "No list with that ID found";
+ return exception 404, "No list with that ID found";
}
$r{version} = $list->version;
unless ($list) {
$dbh->txn_commit;
- status 404;
- content_type 'text/plain';
- return "No such list";
+ exception 404, "No such list";
}
my $item = $dbh->resultset('ShoppingListItem')->create(
my $list = $dbh->resultset('ShoppingList')->find($list_id);
unless ($list) {
$dbh->txn_commit;
- status 404;
- content_type 'text/plain';
- return "No such list";
+ return exception 404, "No such list";
}
my $item = $dbh->resultset('ShoppingListItem')->find({shopping_list => $list->id, id => $item_id});
unless ($item) {
$dbh->txn_commit;
- status 404;
- content_type 'text/plain';
- return "No such item";
+ return exception 404, "No such item";
}
# in case no real changes are needed will return the current state
{
unless ($version == $item->version) {
$dbh->txn_commit;
- status 409;
- content_type 'text/plain';
- return
+ return exception 409, exception =>
sprintf( 'Outdated version (current is %d)', $item->version );
}