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 {
{ order_by => { -asc => 'name' } } )->all
)
{
- push @{ $r{lists} }, uri_for( "/list/" . $list->id );
+ push @{ $r{lists} },
+ { uri => uri_for( "/list/" . $list->id ), name => $list->name };
}
$dbh->txn_commit;
# create shopping list
post '/list' => sub {
- my $req = decode_json(request_data);
+ my $req = request_data;
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;
length($list_id) and $list_id =~ /^\d{1,18}$/
or return invalid_input('bad list ID');
- my $req = decode_json(request_data);
+ my $req = request_data;
my $descr = $req->{description};
my $done = JSON->boolean( $req->{done} // 0 );
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(
length($item_id) and $item_id =~ /^\d{1,18}$/
or return invalid_input('bad item ID');
- my $req = decode_json(request_data);
+ my $req = request_data;
my $descr = $req->{description};
my $done = JSON->boolean( $req->{done} // 0 );
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 );
}