105 lines
2.8 KiB
Perl
105 lines
2.8 KiB
Perl
package MyApp::Controller::Book;
|
|
use Mojo::Base 'Mojolicious::Controller', -signatures;
|
|
use MyModel::Book;
|
|
use MyModel::Author;
|
|
|
|
sub about ($self) {
|
|
my $book_count = MyModel::Book->new(rows_per_page => $self->rpp)->count_all;
|
|
$self->render(book_count => $book_count);
|
|
}
|
|
|
|
sub books ($self) {
|
|
my $page_number = $self->accept_posint($self->param('page_number'));
|
|
if (!defined $page_number) {
|
|
$self->redirect_to('not_found');
|
|
return;
|
|
}
|
|
my $book_model = MyModel::Book->new(rows_per_page => $self->rpp);
|
|
my $book_page = $book_model->get_page(
|
|
$page_number,
|
|
$self->param('title_like'),
|
|
$self->param('author_like'),
|
|
);
|
|
my $pager = $book_page->pager;
|
|
if ($page_number > $pager->last_page) {
|
|
$self->redirect_to(
|
|
$self->url_with({ page_number => $pager->last_page })
|
|
);
|
|
return;
|
|
}
|
|
$self->render(
|
|
book_page => $book_page,
|
|
pager => $pager,
|
|
);
|
|
}
|
|
|
|
sub authors ($self) {
|
|
my $page_number = $self->accept_posint($self->param('page_number'));
|
|
my $mbcount = $self->accept_nnint($self->param('minimum_book_count'));
|
|
if ((!defined $page_number) || (!defined $mbcount)) {
|
|
$self->redirect_to('not_found');
|
|
return;
|
|
}
|
|
my $author_model = MyModel::Author->new(rows_per_page => $self->rpp);;
|
|
my $author_page = $author_model->get_page(
|
|
$page_number,
|
|
$self->param('name_like'),
|
|
$mbcount,
|
|
);
|
|
my $pager = $author_page->pager;
|
|
if ($page_number > $pager->last_page) {
|
|
$self->redirect_to(
|
|
$self->url_with({ page_number => $pager->last_page })
|
|
);
|
|
return;
|
|
}
|
|
$self->render(
|
|
author_page => $author_page,
|
|
pager => $pager,
|
|
);
|
|
}
|
|
|
|
sub author ($self) {
|
|
my ($id, $page_number) = (
|
|
$self->param('id'), $self->accept_posint($self->param('page_number'))
|
|
);
|
|
if (!defined $page_number) {
|
|
$self->redirect_to('not_found');
|
|
return;
|
|
}
|
|
my ($author, $book_page) = MyModel::Author->new(
|
|
rows_per_page => $self->rpp
|
|
)->find_by_id($id, $page_number);
|
|
if (!defined $author) {
|
|
$self->redirect_to('not_found');
|
|
return;
|
|
}
|
|
my $pager = $book_page->pager;
|
|
if ($page_number > $pager->last_page) {
|
|
$self->redirect_to(
|
|
$self->url_with({ page_number => $pager->last_page })
|
|
);
|
|
return;
|
|
}
|
|
$self->render(
|
|
author => $author,
|
|
book_page => $book_page,
|
|
pager => $pager,
|
|
);
|
|
}
|
|
|
|
sub set_rpp ($self) {
|
|
my $rpp = $self->accept_posint($self->param('rows_per_page'));
|
|
if ((!defined $rpp) || $rpp < 1 || $rpp > $self->max_rpp) {
|
|
$self->redirect_to('not_found');
|
|
return
|
|
}
|
|
$self->session(rows_per_page => $rpp);
|
|
$self->flash(
|
|
confirmation => sprintf("Updated rows per page to %s.", $self->rpp)
|
|
);
|
|
$self->redirect_to($self->param('target_url'));
|
|
}
|
|
|
|
1;
|