Play frameworkでisucon2アプリを書く-4

このエントリはPlay frameworkひとりアドベントカレンダーの19日目です。

今日は /artist/ を実装します。

controllerを移植

例によって元コードを見ます。

get '/artist/:artistid' => [qw(recent_sold)] => sub {
    my ($self, $c) = @_;
    my $artist = $self->dbh->select_row(
        'SELECT id, name FROM artist WHERE id = ? LIMIT 1',
        $c->args->{artistid},
    );
    my $tickets = $self->dbh->select_all(
        'SELECT id, name FROM ticket WHERE artist_id = ? ORDER BY id',
        $artist->{id},
    );
    for my $ticket (@$tickets) {
        my $count = $self->dbh->select_one(
            'SELECT COUNT(*) FROM variation
             INNER JOIN stock ON stock.variation_id = variation.id
             WHERE variation.ticket_id = ? AND stock.order_id IS NULL',
            $ticket->{id},
        );
        $ticket->{count} = $count;
    }
    $c->render('artist.tx', {
        artist  => $artist,
        tickets => $tickets,
    });
};
  • artist.idでartistからartistを取得
  • artis.idでticketからticketを取得
  • ticketごとにカウントを取得

さて、ticketごとのカウントをviewにどう渡すか困ってしまいました。。
とりあえず動けばいいので、力技ですがHashMapで渡すことにしましょう。

[Read More]