X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FGruntmaster%2FData.pm;fp=lib%2FGruntmaster%2FData.pm;h=4bd7513bd3e23e7c6206b007931ca3277f0610b8;hb=b69781c1e813454383f9890792d3c2b35d747bd4;hp=8a0a7239e76359bc78509dffe5b6e74a6a193972;hpb=1ea1adc8a16e90ff6ba6a00655b3e02fe7aadfec;p=gruntmaster-data.git diff --git a/lib/Gruntmaster/Data.pm b/lib/Gruntmaster/Data.pm index 8a0a723..4bd7513 100644 --- a/lib/Gruntmaster/Data.pm +++ b/lib/Gruntmaster/Data.pm @@ -90,7 +90,7 @@ sub add_names ($) { ## no critic (ProhibitSubroutinePrototypes) $el } -sub user_list { +{us => scalar query('user_list_sth')->hashes} } +sub user_list { scalar query('user_list_sth')->hashes } sub user_entry { my ($id) = @_; @@ -111,14 +111,7 @@ sub problem_list { $where{owner} = $args{owner} if $args{owner}; my $table = $args{contest} ? 'problems JOIN contest_problems cp ON cp.problem = id' : 'problems'; - my $ret = add_names $db->select(\$table, \@columns, \%where, 'name')->hashes; - - my %params; - for (@$ret) { - $params{$_->{level}} //= []; - push @{$params{$_->{level}}}, $_ - } - \%params + add_names $db->select(\$table, \@columns, \%where, 'name')->hashes } sub problem_entry { @@ -137,42 +130,19 @@ sub problem_entry { $ret } -sub problem_full { - my ($id) = @_; - scalar query(problem_full_sth => $id)->hash; -} +sub problem_full { scalar query(problem_full_sth => $_[0])->hash } -sub contest_list { - my $ret = add_names query('contest_list_sth')->hashes; +sub contest_list { add_names query('contest_list_sth')->hashes } - my %ret; - for (@$ret) { - my $state = $_->{finished} ? 'finished' : $_->{started} ? 'running' : 'pending'; - $ret{$state} //= []; - push @{$ret{$state}}, $_; - } +sub contest_entry { add_names query(contest_entry_sth => $_[0])->hash } - \%ret -} +sub contest_full { scalar query(contest_full_sth => $_[0])->hash } -sub contest_entry { - my ($id) = @_; - add_names query(contest_entry_sth => $id)->hash; -} - -sub contest_full { - my ($id) = @_; - scalar query(contest_full_sth => $id)->hash; -} - -sub contest_has_problem { - my ($contest, $problem) = @_; - query('contest_has_problem_sth', $contest, $problem)->flat -} +sub contest_has_problem { query('contest_has_problem_sth', @_[0, 1])->flat } sub job_list { my (%args) = @_; - $args{page} //= 1; + $args{page} = int ($args{page} // 1); my %where = ( maybe contest => $args{contest}, maybe owner => $args{owner}, @@ -184,29 +154,23 @@ sub job_list { my $rows = $db->select('job_entry', 'COUNT(*)', \%where)->list; my $pages = int (($rows + JOBS_PER_PAGE - 1) / JOBS_PER_PAGE); my ($stmt, @bind) = $db->abstract->select('job_entry', '*', \%where, {-desc => 'id'}); - my $jobs = $db->query("$stmt LIMIT " . JOBS_PER_PAGE . ' OFFSET ' . ($args{page} - 1) * JOBS_PER_PAGE, @bind)->hashes; - my %ret = ( - log => add_names $jobs, + my $jobs = add_names $db->query("$stmt LIMIT " . JOBS_PER_PAGE . ' OFFSET ' . ($args{page} - 1) * JOBS_PER_PAGE, @bind)->hashes; + my $pageinfo = { current_page => $args{page}, last_page => $pages, - ); - $ret{previous_page} = $args{page} - 1 if $args{page} - 1; - $ret{next_page} = $args{page} + 1 if $args{page} < $pages; - - \%ret; + ($args{page} - 1) ? (previous_page => $args{page} - 1) : (), + ($args{page} < $pages) ? (next_page => $args{page} + 1) : (), + }; + wantarray ? ($jobs, $pageinfo) : $jobs; } sub job_entry { - my ($id) = @_; - my $ret = add_names query(job_entry_sth => $id)->hash; + my $ret = add_names query(job_entry_sth => $_[0])->hash; $ret->{results} = decode_json $ret->{results} if $ret->{results}; $ret } -sub job_full { - my ($id) = @_; - scalar query(job_full_sth => $id)->hash -} +sub job_full { scalar query(job_full_sth => $_[0])->hash } sub create_job { my (%args) = @_;