# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-03-05 13:11:39
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dAEmtAexvUaNXLgYz2rNEg
-our $VERSION = '5999.000_011';
+our $VERSION = '5999.000_012';
use Lingua::EN::Inflect qw/PL_N/;
use JSON::MaybeXS qw/decode_json/;
}
sub user_list {
- my $rs = $_[0]->users->search(undef, {order_by => 'name', columns => USER_PUBLIC_COLUMNS});
- [ map { { $_->get_columns } } $rs->all ]
+ my ($self) = @_;
+ my $rs = $self->users->search(undef, {columns => USER_PUBLIC_COLUMNS} );
+ my (%solved, %attempted, %contests);
+
+ for my $row ($self->problem_statuses->all) {
+ $solved {$row->rawowner}++ if $row->solved;
+ $attempted{$row->rawowner}++ unless $row->solved;
+ }
+ $contests{$_->rawowner}++ for $self->contest_statuses->all;
+
+ [ sort { $b->{solved} <=> $a->{solved} or $b->{attempted} <=> $a->{attempted} } map { ## no critic (ProhibitReverseSort)
+ my $id = $_->id;
+ +{ $_->get_columns,
+ solved => ($solved{$id} // 0),
+ attempted => ($attempted{$id} // 0),
+ contests => ($contests{$id} // 0) }
+ } $rs->all ]
}
sub user_entry {
my ($self, $id) = @_;
my $user = $self->users->find($id, {columns => USER_PUBLIC_COLUMNS, prefetch => [qw/problem_statuses contest_statuses/]});
- my @problems = map { {problem => $_->get_column('problem'), solved => $_->solved} } $user->problem_statuses;
- my @contests = map { {contest => $_->contest->id, contest_name => $_->contest->name, rank => $_->rank, score => $_->score} } $user->contest_statuses->search(undef, {prefetch => 'contest'});
+ my @problems = map { {problem => $_->get_column('problem'), solved => $_->solved} } $user->problem_statuses->search(undef, {order_by => 'problem'});
+ my @contests = map { {contest => $_->contest->id, contest_name => $_->contest->name, rank => $_->rank, score => $_->score} } $user->contest_statuses->search(undef, {prefetch => 'contest', order_by => 'contest.start DESC'});
+{ $user->get_columns, problems => \@problems, contests => \@contests }
}