Files
compiled.world/lib/CW/Controller/Board.pm
2026-08-22 23:59:41 -06:00

60 lines
1.3 KiB
Perl

package CW::Controller::Board;
use Moo;
extends 'CW::Controller';
has page_size => (
is => 'lazy',
default => sub { 32 }
);
sub index {
my ($self) = @_;
my $board_identifier = $self->params->{board};
if ( !$board_identifier ) {
return $self->evac(404);
}
my $board =
$self->dbh->selectrow_hashref( "SELECT * FROM boards WHERE id = ?",
undef, $board_identifier );
if ( !$board ) {
return $self->evac(404);
}
my ($total_posts) = $self->dbh->selectrow_array(
"SELECT COUNT(id) FROM posts WHERE board_id = ? ORDER BY created_at",
undef, $board_identifier );
my $query = $self->request->query_parameters;
my $page = $query->{p} // 1;
my $page_size = $self->page_size;
my $offset = $page == 1 ? 0 : $page - 1;
my $posts = $self->dbh->selectall_arrayref(
"SELECT * FROM posts WHERE board_id = ?"
. " ORDER BY created_at LIMIT ? , ?",
undef,
$board_identifier,
$page_size + 0,
$page_size * $offset
);
$self->response->template(
'Board',
{
page => $page,
page_size => $page_size,
total_posts => $total_posts,
board => $board,
posts => $posts
}
);
}
1;