53 lines
1.3 KiB
Perl
53 lines
1.3 KiB
Perl
package PoorBooru::API::V0;
|
|
use v5.36;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Mojo::Base "Mojolicious";
|
|
|
|
use PoorBooru::Schema;
|
|
|
|
sub _random_entry ($c, $rs, $cb)
|
|
{
|
|
my $entry = $c->schema->resultset($rs)
|
|
->search(undef, { order_by => \"random()", rows => 1 })->single;
|
|
|
|
return $c->render(
|
|
json => { error => "$rs not found" },
|
|
status => 404,
|
|
) if !defined($entry);
|
|
|
|
return $cb->($c, $entry);
|
|
}
|
|
|
|
sub startup ($self)
|
|
{
|
|
$self->moniker("poorbooru-api-v0");
|
|
|
|
my $config = $self->plugin("Config");
|
|
$self->secrets($config->{secrets});
|
|
|
|
$self->helper(schema => sub {
|
|
state $schema = PoorBooru::Schema->connect($config->{dsn})
|
|
});
|
|
$self->helper(pager => sub ($, $dbp) {
|
|
map +( $_ => $dbp->$_ ), qw(first_page previous_page
|
|
current_page next_page last_page)
|
|
});
|
|
$self->helper(random_entry => \&_random_entry);
|
|
|
|
my $r = $self->routes;
|
|
|
|
$r->get("/meta")->to("meta#index")->name("meta");
|
|
|
|
$r->get("/tags")->to("tags#list")->name("tags_list");
|
|
$r->get("/tag/:tag_id_or_name")->to("tags#show")->name("tag_show");
|
|
$r->get("/random/tag")->to("tags#random")->name("tag_random");
|
|
|
|
$r->get("/media")->to("media#list")->name("media_list");
|
|
$r->get("/media/:media_id")->to("media#show")->name("media_show");
|
|
$r->get("/random/media")->to("media#random")->name("media_random");
|
|
}
|
|
|
|
1;
|