Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
bwinf
medal
Commits
5be71da1
Commit
5be71da1
authored
Nov 11, 2020
by
Robert Czechowski
Committed by
Robert Czechowski
Jan 05, 2021
Browse files
Add new database field 'requires_contest' in contest
parent
aa893de9
Changes
8
Show whitespace changes
Inline
Side-by-side
migrations/postgres/0002_alter_contest_user_add_requires_contest.sql
0 → 100644
View file @
5be71da1
ALTER
TABLE
contest
ADD
COLUMN
requires_contest
TEXT
;
migrations/sqlite_v2/0002_alter_contest_user_add_requires_contest.sql
0 → 100644
View file @
5be71da1
ALTER
TABLE
contest
ADD
COLUMN
requires_contest
TEXT
;
src/contestreader_yaml.rs
View file @
5be71da1
...
...
@@ -27,6 +27,7 @@ struct ContestYaml {
public_listing
:
Option
<
bool
>
,
requires_login
:
Option
<
bool
>
,
requires_contest
:
Option
<
String
>
,
secret
:
Option
<
String
>
,
message
:
Option
<
String
>
,
...
...
@@ -62,6 +63,7 @@ pub fn parse_yaml(content: &str, filename: &str, directory: &str) -> Option<Cont
config
.max_grade
,
config
.position
,
config
.requires_login
,
config
.requires_contest
,
config
.secret
,
config
.message
);
// TODO: Timeparsing should fail more pleasantly (-> Panic, thus shows message)
...
...
src/db_conn.base.rs
View file @
5be71da1
...
...
@@ -125,7 +125,7 @@ impl MedalObject<Connection> for Contest {
let
query
=
"UPDATE contest
SET location = $2,filename = $3, name = $4, duration = $5, public = $6, start_date = $7,
end_date = $8, min_grade = $9, max_grade = $10, positionalnumber = $11,
requires_login = $12, secret = $1
3
, message = $1
4
requires_login = $12,
requires_contest = $13,
secret = $1
4
, message = $1
5
WHERE id = $1"
;
conn
.execute
(
query
,
&
[
&
id
,
...
...
@@ -140,6 +140,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -147,8 +148,9 @@ impl MedalObject<Connection> for Contest {
}
None
=>
{
let
query
=
"INSERT INTO contest (location, filename, name, duration, public, start_date, end_date,
min_grade, max_grade, positionalnumber, requires_login, secret, message)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)"
;
min_grade, max_grade, positionalnumber, requires_login,
requires_contest, secret, message)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)"
;
conn
.execute
(
query
,
&
[
&
self
.location
,
&
self
.filename
,
...
...
@@ -161,6 +163,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -996,7 +999,7 @@ impl MedalConnection for Connection {
fn
get_contest_list
(
&
self
)
->
Vec
<
Contest
>
{
let
query
=
"SELECT id, location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
positionalnumber, requires_login, secret, message
positionalnumber, requires_login,
requires_contest,
secret, message
FROM contest
ORDER BY positionalnumber"
;
self
.query_map_many
(
query
,
&
[],
|
row
|
Contest
{
id
:
Some
(
row
.get
(
0
)),
...
...
@@ -1011,15 +1014,16 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
9
),
positionalnumber
:
row
.get
(
10
),
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
}
fn
get_contest_by_id
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
requires_login, secret, message
requires_login,
requires_contest,
secret, message
FROM contest
WHERE id = $1"
;
self
.query_map_one
(
query
,
&
[
&
contest_id
],
|
row
|
Contest
{
id
:
Some
(
contest_id
),
...
...
@@ -1034,8 +1038,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
.unwrap
()
// TODO: Should return Option?
...
...
@@ -1044,7 +1049,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_complete
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name,
task.id, task.location, task.stars
FROM contest
...
...
@@ -1067,16 +1072,17 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
},
Task
{
id
:
Some
(
row
.get
(
1
4
)),
taskgroup
:
row
.get
(
1
2
),
location
:
row
.get
(
1
5
),
stars
:
row
.get
(
1
6
)
})
Task
{
id
:
Some
(
row
.get
(
1
5
)),
taskgroup
:
row
.get
(
1
3
),
location
:
row
.get
(
1
6
),
stars
:
row
.get
(
1
7
)
})
})
.unwrap
();
let
mut
taskgroupcontest_iter
=
taskgroupcontest
.into_iter
();
...
...
@@ -1103,7 +1109,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_partial
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name
FROM contest
JOIN taskgroup ON contest.id = taskgroup.contest
...
...
@@ -1122,12 +1128,13 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
})
...
...
@@ -1169,7 +1176,8 @@ impl MedalConnection for Connection {
fn
get_all_participations_complete
(
&
self
,
session_id
:
i32
)
->
Vec
<
(
Participation
,
Contest
)
>
{
let
query
=
"SELECT participation.start_date, contest.id, location, filename, name, duration, public,
contest.start_date, end_date, min_grade, max_grade, requires_login, secret, message
contest.start_date, end_date, min_grade, max_grade, requires_login, requires_contest,
secret, message
FROM participation
JOIN contest ON participation.contest = contest.id
WHERE participation.session = $1"
;
...
...
@@ -1187,8 +1195,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
10
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
@@ -1230,7 +1239,7 @@ impl MedalConnection for Connection {
let
query
=
"SELECT task.location, task.stars, taskgroup.id, taskgroup.name, taskgroup.active, contest.id,
contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message
FROM contest
JOIN taskgroup ON taskgroup.contest = contest.id
JOIN task ON task.taskgroup = taskgroup.id
...
...
@@ -1255,8 +1264,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
14
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
15
),
secret
:
row
.get
(
16
),
message
:
row
.get
(
17
),
requires_contest
:
row
.get
(
16
),
secret
:
row
.get
(
17
),
message
:
row
.get
(
18
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
src/db_conn_postgres.rs
View file @
5be71da1
...
...
@@ -244,7 +244,7 @@ impl MedalObject<Connection> for Contest {
let
query
=
"UPDATE contest
SET location = $2,filename = $3, name = $4, duration = $5, public = $6, start_date = $7,
end_date = $8, min_grade = $9, max_grade = $10, positionalnumber = $11,
requires_login = $12, secret = $1
3
, message = $1
4
requires_login = $12,
requires_contest = $13,
secret = $1
4
, message = $1
5
WHERE id = $1"
;
conn
.execute
(
query
,
&
[
&
id
,
...
...
@@ -259,6 +259,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -266,8 +267,9 @@ impl MedalObject<Connection> for Contest {
}
None
=>
{
let
query
=
"INSERT INTO contest (location, filename, name, duration, public, start_date, end_date,
min_grade, max_grade, positionalnumber, requires_login, secret, message)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)"
;
min_grade, max_grade, positionalnumber, requires_login,
requires_contest, secret, message)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)"
;
conn
.execute
(
query
,
&
[
&
self
.location
,
&
self
.filename
,
...
...
@@ -280,6 +282,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -1115,7 +1118,7 @@ impl MedalConnection for Connection {
fn
get_contest_list
(
&
self
)
->
Vec
<
Contest
>
{
let
query
=
"SELECT id, location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
positionalnumber, requires_login, secret, message
positionalnumber, requires_login,
requires_contest,
secret, message
FROM contest
ORDER BY positionalnumber"
;
self
.query_map_many
(
query
,
&
[],
|
row
|
Contest
{
id
:
Some
(
row
.get
(
0
)),
...
...
@@ -1130,15 +1133,16 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
9
),
positionalnumber
:
row
.get
(
10
),
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
}
fn
get_contest_by_id
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
requires_login, secret, message
requires_login,
requires_contest,
secret, message
FROM contest
WHERE id = $1"
;
self
.query_map_one
(
query
,
&
[
&
contest_id
],
|
row
|
Contest
{
id
:
Some
(
contest_id
),
...
...
@@ -1153,8 +1157,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
.unwrap
()
// TODO: Should return Option?
...
...
@@ -1163,7 +1168,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_complete
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name,
task.id, task.location, task.stars
FROM contest
...
...
@@ -1186,16 +1191,17 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
},
Task
{
id
:
Some
(
row
.get
(
1
4
)),
taskgroup
:
row
.get
(
1
2
),
location
:
row
.get
(
1
5
),
stars
:
row
.get
(
1
6
)
})
Task
{
id
:
Some
(
row
.get
(
1
5
)),
taskgroup
:
row
.get
(
1
3
),
location
:
row
.get
(
1
6
),
stars
:
row
.get
(
1
7
)
})
})
.unwrap
();
let
mut
taskgroupcontest_iter
=
taskgroupcontest
.into_iter
();
...
...
@@ -1222,7 +1228,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_partial
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name
FROM contest
JOIN taskgroup ON contest.id = taskgroup.contest
...
...
@@ -1241,12 +1247,13 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
})
...
...
@@ -1288,7 +1295,8 @@ impl MedalConnection for Connection {
fn
get_all_participations_complete
(
&
self
,
session_id
:
i32
)
->
Vec
<
(
Participation
,
Contest
)
>
{
let
query
=
"SELECT participation.start_date, contest.id, location, filename, name, duration, public,
contest.start_date, end_date, min_grade, max_grade, requires_login, secret, message
contest.start_date, end_date, min_grade, max_grade, requires_login, requires_contest,
secret, message
FROM participation
JOIN contest ON participation.contest = contest.id
WHERE participation.session = $1"
;
...
...
@@ -1306,8 +1314,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
10
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
@@ -1349,7 +1358,7 @@ impl MedalConnection for Connection {
let
query
=
"SELECT task.location, task.stars, taskgroup.id, taskgroup.name, taskgroup.active, contest.id,
contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message
FROM contest
JOIN taskgroup ON taskgroup.contest = contest.id
JOIN task ON task.taskgroup = taskgroup.id
...
...
@@ -1374,8 +1383,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
14
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
15
),
secret
:
row
.get
(
16
),
message
:
row
.get
(
17
),
requires_contest
:
row
.get
(
16
),
secret
:
row
.get
(
17
),
message
:
row
.get
(
18
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
src/db_conn_sqlite_new.rs
View file @
5be71da1
...
...
@@ -244,7 +244,7 @@ impl MedalObject<Connection> for Contest {
let
query
=
"UPDATE contest
SET location = ?2,filename = ?3, name = ?4, duration = ?5, public = ?6, start_date = ?7,
end_date = ?8, min_grade = ?9, max_grade = ?10, positionalnumber = ?11,
requires_login = ?12, secret = ?1
3
, message = ?1
4
requires_login = ?12,
requires_contest = ?13,
secret = ?1
4
, message = ?1
5
WHERE id = ?1"
;
conn
.execute
(
query
,
&
[
&
id
,
...
...
@@ -259,6 +259,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -266,8 +267,9 @@ impl MedalObject<Connection> for Contest {
}
None
=>
{
let
query
=
"INSERT INTO contest (location, filename, name, duration, public, start_date, end_date,
min_grade, max_grade, positionalnumber, requires_login, secret, message)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13)"
;
min_grade, max_grade, positionalnumber, requires_login,
requires_contest, secret, message)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14)"
;
conn
.execute
(
query
,
&
[
&
self
.location
,
&
self
.filename
,
...
...
@@ -280,6 +282,7 @@ impl MedalObject<Connection> for Contest {
&
self
.max_grade
,
&
self
.positionalnumber
,
&
self
.requires_login
,
&
self
.requires_contest
,
&
self
.secret
,
&
self
.message
])
.unwrap
();
...
...
@@ -1115,7 +1118,7 @@ impl MedalConnection for Connection {
fn
get_contest_list
(
&
self
)
->
Vec
<
Contest
>
{
let
query
=
"SELECT id, location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
positionalnumber, requires_login, secret, message
positionalnumber, requires_login,
requires_contest,
secret, message
FROM contest
ORDER BY positionalnumber"
;
self
.query_map_many
(
query
,
&
[],
|
row
|
Contest
{
id
:
Some
(
row
.get
(
0
)),
...
...
@@ -1130,15 +1133,16 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
9
),
positionalnumber
:
row
.get
(
10
),
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
}
fn
get_contest_by_id
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT location, filename, name, duration, public, start_date, end_date, min_grade, max_grade,
requires_login, secret, message
requires_login,
requires_contest,
secret, message
FROM contest
WHERE id = ?1"
;
self
.query_map_one
(
query
,
&
[
&
contest_id
],
|
row
|
Contest
{
id
:
Some
(
contest_id
),
...
...
@@ -1153,8 +1157,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
})
.unwrap
()
.unwrap
()
// TODO: Should return Option?
...
...
@@ -1163,7 +1168,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_complete
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name,
task.id, task.location, task.stars
FROM contest
...
...
@@ -1186,16 +1191,17 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
},
Task
{
id
:
Some
(
row
.get
(
1
4
)),
taskgroup
:
row
.get
(
1
2
),
location
:
row
.get
(
1
5
),
stars
:
row
.get
(
1
6
)
})
Task
{
id
:
Some
(
row
.get
(
1
5
)),
taskgroup
:
row
.get
(
1
3
),
location
:
row
.get
(
1
6
),
stars
:
row
.get
(
1
7
)
})
})
.unwrap
();
let
mut
taskgroupcontest_iter
=
taskgroupcontest
.into_iter
();
...
...
@@ -1222,7 +1228,7 @@ impl MedalConnection for Connection {
fn
get_contest_by_id_partial
(
&
self
,
contest_id
:
i32
)
->
Contest
{
let
query
=
"SELECT contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message,
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message,
taskgroup.id, taskgroup.name
FROM contest
JOIN taskgroup ON contest.id = taskgroup.contest
...
...
@@ -1241,12 +1247,13 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
8
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
9
),
secret
:
row
.get
(
10
),
message
:
row
.get
(
11
),
requires_contest
:
row
.get
(
10
),
secret
:
row
.get
(
11
),
message
:
row
.get
(
12
),
taskgroups
:
Vec
::
new
()
},
Taskgroup
{
id
:
Some
(
row
.get
(
1
2
)),
Taskgroup
{
id
:
Some
(
row
.get
(
1
3
)),
contest
:
contest_id
,
name
:
row
.get
(
1
3
),
name
:
row
.get
(
1
4
),
active
:
true
,
positionalnumber
:
None
,
tasks
:
Vec
::
new
()
})
...
...
@@ -1288,7 +1295,8 @@ impl MedalConnection for Connection {
fn
get_all_participations_complete
(
&
self
,
session_id
:
i32
)
->
Vec
<
(
Participation
,
Contest
)
>
{
let
query
=
"SELECT participation.start_date, contest.id, location, filename, name, duration, public,
contest.start_date, end_date, min_grade, max_grade, requires_login, secret, message
contest.start_date, end_date, min_grade, max_grade, requires_login, requires_contest,
secret, message
FROM participation
JOIN contest ON participation.contest = contest.id
WHERE participation.session = ?1"
;
...
...
@@ -1306,8 +1314,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
10
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
11
),
secret
:
row
.get
(
12
),
message
:
row
.get
(
13
),
requires_contest
:
row
.get
(
12
),
secret
:
row
.get
(
13
),
message
:
row
.get
(
14
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
@@ -1349,7 +1358,7 @@ impl MedalConnection for Connection {
let
query
=
"SELECT task.location, task.stars, taskgroup.id, taskgroup.name, taskgroup.active, contest.id,
contest.location, contest.filename, contest.name, contest.duration, contest.public,
contest.start_date, contest.end_date, contest.min_grade, contest.max_grade,
contest.requires_login, contest.secret, contest.message
contest.requires_login,
contest.requires_contest,
contest.secret, contest.message
FROM contest
JOIN taskgroup ON taskgroup.contest = contest.id
JOIN task ON task.taskgroup = taskgroup.id
...
...
@@ -1374,8 +1383,9 @@ impl MedalConnection for Connection {
max_grade
:
row
.get
(
14
),
positionalnumber
:
None
,
requires_login
:
row
.get
(
15
),
secret
:
row
.get
(
16
),
message
:
row
.get
(
17
),
requires_contest
:
row
.get
(
16
),
secret
:
row
.get
(
17
),
message
:
row
.get
(
18
),
taskgroups
:
Vec
::
new
()
})
})
.unwrap
()
...
...
src/db_objects.rs
View file @
5be71da1
...
...
@@ -89,6 +89,7 @@ pub struct Contest {
pub
max_grade
:
Option
<
i32
>
,
pub
positionalnumber
:
Option
<
i32
>
,
pub
requires_login
:
Option
<
bool
>
,
pub
requires_contest
:
Option
<
String
>
,
pub
secret
:
Option
<
String
>
,
pub
taskgroups
:
Vec
<
Taskgroup
>
,
pub
message
:
Option
<
String
>
,
...
...
@@ -169,7 +170,7 @@ impl Contest {
#[allow(clippy::too_many_arguments)]
pub
fn
new
(
location
:
String
,
filename
:
String
,
name
:
String
,
duration
:
i32
,
public
:
bool
,
start
:
Option
<
Timespec
>
,
end
:
Option
<
Timespec
>
,
min_grade
:
Option
<
i32
>
,
max_grade
:
Option
<
i32
>
,
positionalnumber
:
Option
<
i32
>
,
requires_login
:
Option
<
bool
>
,
secret
:
Option
<
String
>
,
positionalnumber
:
Option
<
i32
>
,
requires_login
:
Option
<
bool
>
,
requires_contest
:
Option
<
String
>
,
secret
:
Option
<
String
>
,
message
:
Option
<
String
>
)
->
Self
{
...
...
@@ -185,6 +186,7 @@ impl Contest {
max_grade
,
positionalnumber
,
requires_login
,
requires_contest
,
secret
,
message
,
taskgroups
:
Vec
::
new
()
}
...
...
src/main.rs
View file @
5be71da1
...
...
@@ -300,6 +300,7 @@ mod tests {
None
,
None
,
None
,
None
,
None
);
contest
.save
(
&
conn
);
...
...
@@ -316,6 +317,7 @@ mod tests {
None
,
None
,
None
,
None
,
None
);
let
mut
taskgroup
=
Taskgroup
::
new
(
"TaskgroupName"
.to_string
(),
None
);
let
task
=
Task
::
new
(
"taskdir1"
.to_string
(),
3
);
// ID: 1
...
...
@@ -338,6 +340,7 @@ mod tests {
None
,
None
,
None
,
None
,
None
);
let
mut
taskgroup
=
Taskgroup
::
new
(
"TaskgroupName"
.to_string
(),
None
);
let
task
=
Task
::
new
(
"taskdir1"
.to_string
(),
3
);
// ID: 3
...
...
@@ -360,6 +363,7 @@ mod tests {
None
,
None
,
None
,
None
,
None
);
let
mut
taskgroup
=
Taskgroup
::
new
(
"TaskgroupRenameName"
.to_string
(),
None
);
let
task
=
Task
::
new
(
"taskdir1"
.to_string
(),
3
);
// ID: 5
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment