74 lines
1.6 KiB
Perl
74 lines
1.6 KiB
Perl
|
package Pear::LocalLoop::Command::leaderboard;
|
||
|
use Mojo::Base 'Mojolicious::Command';
|
||
|
|
||
|
use Mojo::Util 'getopt';
|
||
|
|
||
|
has description => 'Build leaderboards';
|
||
|
|
||
|
has usage => sub { shift->extract_usage };
|
||
|
|
||
|
sub run {
|
||
|
my ( $self, @args ) = @_;
|
||
|
|
||
|
getopt \@args,
|
||
|
't|type=s' => \my $type,
|
||
|
'l|list' => \my $list,
|
||
|
'd|date=s' => \my $date;
|
||
|
|
||
|
my $leaderboard_rs = $self->app->schema->resultset('Leaderboard');
|
||
|
|
||
|
if ( defined $list ) {
|
||
|
say sprintf('%20s : %20s', 'Type', 'Name');
|
||
|
for my $leaderboard ( $leaderboard_rs->all ) {
|
||
|
say sprintf('%20s : %20s', $leaderboard->type, $leaderboard->name);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( defined $type ) {
|
||
|
my $leaderboard = $leaderboard_rs->find({ type => $type });
|
||
|
|
||
|
unless ( defined $leaderboard ) {
|
||
|
say "Unknown Leaderboard Type";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( defined $date ) {
|
||
|
say "Creating leaderboard of type $type with date $date";
|
||
|
|
||
|
my $date_formatter = DateTime::Format::Strptime->new(
|
||
|
pattern => '%Y-%m-%d'
|
||
|
);
|
||
|
|
||
|
my $datetime = $date_formatter->parse_datetime($date);
|
||
|
|
||
|
unless ( defined $datetime ) {
|
||
|
say "Unrecognised date format, please use 'YYYY-MM-DD' Format";
|
||
|
}
|
||
|
|
||
|
$leaderboard->create_new($datetime);
|
||
|
|
||
|
say "Done";
|
||
|
} else {
|
||
|
say 'Leaderboards of type ' . $type . ' available:';
|
||
|
for my $set ( $leaderboard->sets->all ) {
|
||
|
say $set->date;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
=head1 SYNOPSIS
|
||
|
|
||
|
Usage: APPLICATION leaderboard [OPTIONS]
|
||
|
|
||
|
Options:
|
||
|
|
||
|
-l, --list List all leaderboard types
|
||
|
-t, --type Leaderboard type to create
|
||
|
-d, --date Start Date (in YYYY-MM-DD format)
|
||
|
|
||
|
=cut
|
||
|
|
||
|
1;
|