X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FGruntmaster%2FData.pm;h=9fee650af2088752301936c98a8b650eb355bf32;hb=4ed3f8e7c64594bb4ea26abb1c4fb51a5a8258d6;hp=a90149aea9097e00625338c73953d0d6908372fa;hpb=fb6a4e3d1893cf394778dcae77db790f4571b4a2;p=gruntmaster-data.git diff --git a/lib/Gruntmaster/Data.pm b/lib/Gruntmaster/Data.pm index a90149a..9fee650 100644 --- a/lib/Gruntmaster/Data.pm +++ b/lib/Gruntmaster/Data.pm @@ -1,15 +1,24 @@ +use utf8; package Gruntmaster::Data; -use v5.14; + +# Created by DBIx::Class::Schema::Loader +# DO NOT MODIFY THE FIRST PART OF THIS FILE + +use strict; use warnings; -use parent qw/Exporter/; -use JSON qw/encode_json decode_json/; -use Redis; -use Sub::Name qw/subname/; +use base 'DBIx::Class::Schema'; + +__PACKAGE__->load_namespaces; -our $contest; -my $redis = Redis->new; -my $pubsub = Redis->new; + +# 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_003; + +use Lingua::EN::Inflect qw/PL_N/; +use Sub::Name qw/subname/; sub dynsub{ our ($name, $sub) = @_; @@ -18,86 +27,12 @@ sub dynsub{ } BEGIN { - for my $cmd (qw/multi exec smembers get hget hdel hset sadd srem incr hmset hsetnx publish del/) { - dynsub uc $cmd, sub { $redis->$cmd(@_) }; - } - - for my $cmd (qw/subscribe wait_for_messages/) { - dynsub uc $cmd, sub { $pubsub->$cmd(@_) }; + for my $rs (qw/contest contest_problem job open problem user/) { + my $rsname = ucfirst $rs; + $rsname =~ s/_([a-z])/\u$1/g; + dynsub PL_N($rs) => sub { $_[0]->resultset($rsname) }; + dynsub $rs => sub { $_[0]->resultset($rsname)->find($_[1]) }; } } -sub cp { defined $contest ? "contest.$contest." : '' } - -sub multi () { MULTI } -sub rexec () { EXEC } - -sub problems () { SMEMBERS cp . 'problem' } -sub contests () { SMEMBERS cp . 'contest' } -sub users () { SMEMBERS cp . 'user' } -sub jobcard () { GET cp . 'job' } - -sub job_results (_) { decode_json HGET cp . "job.$_[0]", 'results' } -sub set_job_results ($+) { HSET cp . "job.$_[0]", 'results', encode_json $_[1] } -sub job_inmeta (_) { decode_json HGET cp . "job.$_[0]", 'inmeta' } -sub set_job_inmeta ($+) { HSET cp . "job.$_[0]", 'inmeta', encode_json $_[1] } -sub problem_meta (_) { decode_json HGET cp . "problem.$_[0]", 'meta' } -sub set_problem_meta ($+) { HSET cp . "problem.$_[0]", 'meta', encode_json $_[1] } -sub job_daemon (_) { HGET cp . "job.$_[0]", 'daemon' } -sub set_job_daemon ($$) { HSETNX cp . "job.$_[0]", 'daemon', $_[1] }; - -sub defhash{ - my ($name, @keys) = @_; - for my $key (@keys) { - dynsub "${name}_$key", sub (_) { HGET cp . "$name.$_[0]", $key }; - dynsub "set_${name}_$key", sub ($$) { HSET cp . "$name.$_[0]", $key, $_[1] }; - } - - dynsub "edit_$name", sub { - my ($key, %values) = @_; - HMSET cp . "$name.$key", %values; - }; - - dynsub "insert_$name", sub { - my ($key, %values) = @_; - SADD cp . $name, $key or return; - HMSET cp . "$name.$key", %values; - }; - dynsub "remove_$name", sub (_) { - my $key = shift; - SREM cp . $name, $key; - DEL cp . "$name.$key"; - }; - - dynsub "push_$name", sub { - my $nr = INCR cp . $name; - HMSET cp . "$name.$nr", @_; - $nr - }; -} - -defhash problem => qw/name level statement owner author/; -defhash contest => qw/start end name owner/; -defhash job => qw/date errors extension filesize private problem result result_text user/; -defhash user => qw/name email town university level/; - -sub clean_job (_){ - HDEL cp . "job.$_[0]", qw/result result_text results daemon/ -} - -sub mark_open { - my ($problem, $user) = @_; - HSETNX cp . 'open', "$problem.$user", time; -} - -sub get_open { - my ($problem, $user) = @_; - HGET cp . 'open', "$problem.$user"; -} - -our @EXPORT = do { - no strict 'refs'; - grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__ . '::'}; -}; - -1 +1;