Make redis-to-postgres also copy problems which are only in a contest
[gruntmaster-data.git] / redis-to-postgres
CommitLineData
4ed3f8e7
MG
1#!/usr/bin/perl -w
2use v5.14;
3use Gruntmaster::Data;
4use Gruntmaster::OldData;
5
6use JSON qw/encode_json/;
7
8my $db = Gruntmaster::Data->connect('dbi:Pg:');
9
10for (users) {
11 $db->users->create({
12 id => $_,
13 name => user_name,
14 email => user_email,
15 town => user_town,
16 university => user_university,
17 level => user_level,
18 user_lastjob() ? (lastjob => user_lastjob) : ()
19 })
20}
21
22my @jobs;
23
24for (problems) {
25 my $meta = problem_meta;
26 $db->problems->create({
27 id => $_,
28 author => problem_author,
29 generator => problem_generator() // $meta->{generator},
30 judge => problem_judge() // $meta->{judge},
31 level => problem_level,
32 name => problem_name,
33 olimit => problem_olimit() // $meta->{olimit},
34 owner => problem_owner,
35 private => (problem_private() ? 1 : 0),
36 runner => problem_runner() // $meta->{runner},
37 statement => problem_statement,
38 testcnt => problem_testcnt() // $meta->{testcnt},
39 timeout => problem_timeout() // $meta->{timeout},
9364b433 40 (problem_runner() // $meta->{runner}) eq 'File' ? (tests => encode_json $meta->{tests}) : (),
4ed3f8e7
MG
41 exists $meta->{files} ? (versource => $meta->{files}{ver}{content}, verformat => $meta->{files}{ver}{format}) : ()
42 })
43}
44
45for (contests) {
46 $db->contests->create({
47 id => $_,
48 name => contest_name,
49 start => contest_start,
50 stop => contest_end,
51 owner => contest_owner,
52 });
53 local $Gruntmaster::OldData::contest = $_;
54 for (problems) {
20fa6cfc
MG
55 eval {
56 my $meta = problem_meta;
57 $db->problems->create({
58 id => $_,
59 author => problem_author,
60 generator => problem_generator() // $meta->{generator},
61 judge => problem_judge() // $meta->{judge},
62 level => problem_level,
63 name => problem_name,
64 olimit => problem_olimit() // $meta->{olimit},
65 owner => problem_owner,
66 private => (problem_private() ? 1 : 0),
67 runner => problem_runner() // $meta->{runner},
68 statement => problem_statement,
69 testcnt => problem_testcnt() // $meta->{testcnt},
70 timeout => problem_timeout() // $meta->{timeout},
71 (problem_runner() // $meta->{runner}) eq 'File' ? (tests => encode_json $meta->{tests}) : (),
72 exists $meta->{files} ? (versource => $meta->{files}{ver}{content}, verformat => $meta->{files}{ver}{format}) : ()
73 })
74 };
4ed3f8e7
MG
75 $db->contest_problems->create({
76 contest => $Gruntmaster::OldData::contest,
77 problem => $_,
78 });
79 }
80 for (1 .. jobcard) {
81 eval {
82 my $meta = job_inmeta;
83 push @jobs, {
84 contest => $Gruntmaster::OldData::contest,
85 daemon => job_daemon,
86 date => job_date,
87 defined job_errors() ? (errors => job_errors) : (),
88 extension => job_extension,
89 format => $meta->{files}{prog}{format},
90 job_private() ? (private => job_private) : (),
91 problem => job_problem,
92 result => job_result,
93 result_text => job_result_text,
94 results => encode_json job_results,
95 source => $meta->{files}{prog}{content},
96 owner => job_user,
97 };
98 }
99 }
100}
101
102for (1 .. jobcard) {
103 eval{
104 my $meta = job_inmeta;
105 push @jobs, {
106 daemon => job_daemon,
107 date => job_date,
108 defined job_errors() ? (errors => job_errors) : (),
109 extension => job_extension,
110 format => $meta->{files}{prog}{format},
111 job_private() ? (private => job_private) : (),
112 problem => job_problem,
113 result => job_result,
114 result_text => job_result_text,
115 results => encode_json job_results,
116 source => $meta->{files}{prog}{content},
117 owner => job_user,
118 };
119 }
120}
121
122@jobs = map { $_->{owner} = $_->{owner} eq 'S7012MY' ? 'Petru' : $_->{owner}; $_} @jobs;
123$db->jobs->create($_) for sort {$a->{date} <=> $b->{date}} @jobs;
This page took 0.017174 seconds and 4 git commands to generate.