]> iEval git - gruntmaster-page.git/blobdiff - lib/Gruntmaster/Data.pm
Add article support
[gruntmaster-page.git] / lib / Gruntmaster / Data.pm
index f9162af3cfda71af69068f1cacbd69e8d727d129..bf5d2e1a808e9e1067544df673b95fad2a143de9 100644 (file)
@@ -9,6 +9,7 @@ use Redis;
 
 our $contest;
 my $redis = Redis->new;
+my $pubsub = Redis->new;
 
 sub dynsub{
        no strict 'refs';
@@ -16,8 +17,12 @@ sub dynsub{
 }
 
 BEGIN {
-       for my $cmd (qw/multi exec smembers get hget hset sadd incr hmset/) {
-               dynsub uc $cmd, sub { say $cmd;exit;$redis->$cmd(@_) };
+       for my $cmd (qw/multi exec smembers get hget hdel hset sadd srem incr hmset hsetnx publish/) {
+               dynsub uc $cmd, sub { $redis->$cmd(@_) };
+       }
+
+       for my $cmd (qw/subscribe wait_for_messages/) {
+               dynsub uc $cmd, sub { $pubsub->$cmd(@_) };
        }
 }
 
@@ -28,12 +33,17 @@ sub rexec                           ()              { EXEC }
 
 sub problems                   ()              { SMEMBERS cp . 'problem' }
 sub contests                   ()              { SMEMBERS cp . 'contest' }
-sub jobcard                    ()              { GET cp . 'job' }
+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 problem_meta               (_)     { decode_json HGET cp . "pb.$_[0]", 'meta' }
-sub set_problem_meta   ($+)    { HSET cp . "pb.$_[0]", 'meta', encode_json $_[1] }
+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) = @_;
@@ -42,24 +52,40 @@ sub defhash{
                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;
+       };
+
        dynsub "push_$name", sub {
                my $nr = INCR cp . $name;
                HMSET cp . "$name.$nr", @_;
+               $nr
        };
 }
 
-defhash problem => qw/name level statement/;
+defhash problem => qw/name level statement owner author/;
 defhash contest => qw/start end name owner/;
-defhash job => qw/date file name private problem result result_text user/;
+defhash job => qw/date 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/
+}
 
-our @EXPORT_OK = do {
+our @EXPORT = do {
        no strict 'refs';
-       grep { $_ =~ /^[a-z]/ and exists &$_ } keys %{__PACKAGE__ . '::'};
+       grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__ . '::'};
 };
 
 1
This page took 0.027964 seconds and 4 git commands to generate.