pub trait MedalConnection {
Show 76 methods
// Required methods
fn reconnect(config: &Config) -> Self;
fn dbtype(&self) -> &'static str;
fn migration_already_applied(&self, name: &str) -> bool;
fn apply_migration(&mut self, name: &str, contents: &str);
fn code_exists(&self, code: &str) -> bool;
fn get_session(&self, key: &str) -> Option<SessionUser>;
fn new_session(&self, key: &str) -> SessionUser;
fn session_set_activity_dates(
&self,
session_id: i32,
account_created: Option<Timespec>,
last_login: Option<Timespec>,
last_activity: Option<Timespec>,
);
fn save_session(&self, session: SessionUser);
fn get_session_or_new(&self, key: &str) -> Result<SessionUser, ()>;
fn get_user_by_id(&self, user_id: i32) -> Option<SessionUser>;
fn get_user_and_group_by_id(
&self,
user_id: i32,
) -> Option<(SessionUser, Option<Group>)>;
fn get_user_and_group_by_logincode(
&self,
logincode: &str,
) -> Option<(SessionUser, Option<Group>)>;
fn set_webauthn_passkey_registration(
&self,
user_id: i32,
passkey_registration: &str,
);
fn get_webauthn_passkey_registration(&self, user_id: i32) -> Option<String>;
fn check_webauthn_cred_id_in_use(&self, cred_id: &str) -> bool;
fn add_webauthn_passkey(
&self,
user_id: i32,
cred_id: &str,
passkey: &str,
name: &str,
) -> i32;
fn delete_webauthn_passkey(&self, session_id: i32, passkey_id: i32);
fn get_webauthn_passkey_names_for_user(
&self,
user_id: i32,
) -> Vec<(i32, String)>;
fn get_all_webauthn_passkeys(&self) -> Vec<String>;
fn get_all_webauthn_credentials(&self) -> Vec<String>;
fn store_webauthn_auth_challenge(
&self,
challenge: &str,
authentication: &str,
) -> i32;
fn get_webauthn_auth_challenge_by_id(&self, auth_id: i32) -> Option<String>;
fn login(
&self,
session: Option<&str>,
username: &str,
password: &str,
) -> Result<String, ()>;
fn login_with_code(
&self,
session: Option<&str>,
logincode: &str,
) -> Result<String, ()>;
fn login_with_key(
&self,
session: Option<&str>,
cred_id: &str,
) -> Result<String, ()>;
fn login_foreign(
&self,
session: Option<&str>,
provider_id: &str,
foreign_id: &str,
_: (bool, bool, &str, &str, Option<i32>, &Option<String>),
) -> Result<(String, Option<Timespec>), ()>;
fn create_user_with_groupcode(
&self,
session: Option<&str>,
groupcode: &str,
) -> Result<String, ()>;
fn update_or_create_group_with_users(&self, group: Group, admin: i32);
fn add_admin_to_group(&self, group: &mut Group, admin: i32);
fn logout(&self, session: &str);
fn signup(
&self,
session_token: &str,
username: &str,
email: &str,
password_hash: String,
salt: &str,
) -> SignupResult;
fn load_submission(
&self,
session: &SessionUser,
task: i32,
subtask: Option<&str>,
) -> Option<Submission>;
fn get_all_submissions(
&self,
session_id: i32,
task: i32,
subtask: Option<&str>,
) -> Vec<Submission>;
fn submit_submission(&self, submission: Submission);
fn get_grade_by_submission(&self, submission_id: i32) -> Grade;
fn get_contest_groups_grades(
&self,
session_id: i32,
contest_id: i32,
) -> (Vec<String>, Vec<(Group, Vec<(UserInfo, Vec<Grade>)>)>);
fn get_taskgroup_user_grade(
&self,
session_id: i32,
taskgroup_id: i32,
) -> Grade;
fn get_contest_user_grades(
&self,
session_id: i32,
contest_id: i32,
) -> Vec<Grade>;
fn export_contest_results_to_file(
&self,
contest_id: i32,
taskgroups_ids: &[(i32, String)],
filename: &str,
);
fn insert_contest_annotations(
&self,
contest_id: i32,
annotations: Vec<(i32, Option<String>)>,
) -> i32;
fn get_submission_by_id_complete_shallow_contest(
&self,
submission_id: i32,
) -> Option<(Submission, Task, Taskgroup, Contest)>;
fn get_contest_list(&self) -> Vec<Contest>;
fn get_contest_list_with_group_member_participations(
&self,
session_id: i32,
) -> Vec<Contest>;
fn get_contest_by_id(&self, contest_id: i32) -> Option<Contest>;
fn get_contest_by_id_partial(&self, contest_id: i32) -> Option<Contest>;
fn get_contest_by_id_complete(&self, contest_id: i32) -> Option<Contest>;
fn get_participation(
&self,
session_id: i32,
contest_id: i32,
) -> Option<Participation>;
fn get_own_participation(
&self,
session_id: i32,
contest_id: i32,
) -> Option<Participation>;
fn get_all_participations_complete(
&self,
session_id: i32,
) -> Vec<(Participation, Contest)>;
fn count_all_stars(&self, session_id: i32) -> i32;
fn count_all_stars_by_contest(&self, session_id: i32) -> Vec<(i32, i32)>;
fn has_participation_by_contest_file(
&self,
session_id: i32,
location: &str,
filename: &str,
) -> bool;
fn new_participation(
&self,
session_id: i32,
contest_id: i32,
team: Option<i32>,
) -> Result<Participation, ()>;
fn get_task_by_id(&self, task_id: i32) -> Option<Task>;
fn get_task_by_id_complete(
&self,
task_id: i32,
) -> Option<(Task, Taskgroup, Contest)>;
fn get_submission_to_validate(
&self,
tasklocation: &str,
subtask: Option<&str>,
) -> i32;
fn find_next_submission_to_validate(&self, userid: i32, taskgroupid: i32);
fn add_group(&self, group: &mut Group);
fn save_group(&self, group: &mut Group);
fn get_groups(&self, session_id: i32) -> Vec<Group>;
fn get_groups_complete(&self, session_id: i32) -> Vec<Group>;
fn get_group(&self, session_id: i32) -> Option<Group>;
fn group_has_protected_participations(&self, session_id: i32) -> bool;
fn get_group_complete(&self, group_id: i32) -> Option<Group>;
fn delete_user(&self, user_id: i32);
fn delete_all_users_for_group(&self, group_id: i32);
fn delete_group(&self, group_id: i32);
fn delete_participation(&self, user_id: i32, contest_id: i32);
fn remove_old_users_and_groups(
&self,
maxstudentage: Timespec,
maxteacherage: Option<Timespec>,
maxage: Option<Timespec>,
) -> Result<(i32, i32, i32, i32), ()>;
fn count_temporary_sessions(&self, maxage: Timespec) -> i32;
fn remove_temporary_sessions(&self, maxage: Timespec, limit: Option<u32>);
fn get_search_users(
&self,
_: (Option<i32>, Option<String>, Option<String>, Option<String>, Option<String>, Option<String>),
) -> Result<Vec<(i32, Option<String>, Option<String>, Option<String>, Option<String>, Option<String>)>, Vec<(i32, String, String, String)>>;
fn get_debug_information(&self) -> String;
fn reset_all_contest_visibilities(&self);
fn reset_all_taskgroup_visibilities(&self);
}
Expand description
This trait abstracts the database connection and provides function for all actions to be performed on the database in the medal platform.
Required Methods§
fn reconnect(config: &Config) -> Self
fn dbtype(&self) -> &'static str
fn migration_already_applied(&self, name: &str) -> bool
fn apply_migration(&mut self, name: &str, contents: &str)
fn code_exists(&self, code: &str) -> bool
Sourcefn get_session(&self, key: &str) -> Option<SessionUser>
fn get_session(&self, key: &str) -> Option<SessionUser>
Try to get session associated to the session token key
.
Returns an Option
that can contain the SessionUser
of the session if the session exists and is not expired or
None
otherwise.
Sourcefn new_session(&self, key: &str) -> SessionUser
fn new_session(&self, key: &str) -> SessionUser
Create a new anonymous session with the session token key
.
Returns the SessionUser
of the session.
Sourcefn session_set_activity_dates(
&self,
session_id: i32,
account_created: Option<Timespec>,
last_login: Option<Timespec>,
last_activity: Option<Timespec>,
)
fn session_set_activity_dates( &self, session_id: i32, account_created: Option<Timespec>, last_login: Option<Timespec>, last_activity: Option<Timespec>, )
Set activity date (for testing purposes)
Sourcefn save_session(&self, session: SessionUser)
fn save_session(&self, session: SessionUser)
Saves the session data of session
in the database.
Sourcefn get_session_or_new(&self, key: &str) -> Result<SessionUser, ()>
fn get_session_or_new(&self, key: &str) -> Result<SessionUser, ()>
Combination of get_session
and new_session
.
This method can still fail in case of database error in order to bubble them up to the webframework
Sourcefn get_user_by_id(&self, user_id: i32) -> Option<SessionUser>
fn get_user_by_id(&self, user_id: i32) -> Option<SessionUser>
Try to get session associated to the id user_id
.
Returns an Option
that can contain the SessionUser
of the session if the session exists or None
otherwise.
Sourcefn get_user_and_group_by_id(
&self,
user_id: i32,
) -> Option<(SessionUser, Option<Group>)>
fn get_user_and_group_by_id( &self, user_id: i32, ) -> Option<(SessionUser, Option<Group>)>
Try to get session and user group associated to the id user_id
.
Returns an Option
that can contain a pair of SessionUser
and Option<Group>
of the session and optionally
the group if the session exists or None
otherwise.
fn get_user_and_group_by_logincode( &self, logincode: &str, ) -> Option<(SessionUser, Option<Group>)>
fn set_webauthn_passkey_registration( &self, user_id: i32, passkey_registration: &str, )
fn get_webauthn_passkey_registration(&self, user_id: i32) -> Option<String>
fn check_webauthn_cred_id_in_use(&self, cred_id: &str) -> bool
fn add_webauthn_passkey( &self, user_id: i32, cred_id: &str, passkey: &str, name: &str, ) -> i32
fn delete_webauthn_passkey(&self, session_id: i32, passkey_id: i32)
fn get_webauthn_passkey_names_for_user( &self, user_id: i32, ) -> Vec<(i32, String)>
fn get_all_webauthn_passkeys(&self) -> Vec<String>
fn get_all_webauthn_credentials(&self) -> Vec<String>
fn store_webauthn_auth_challenge( &self, challenge: &str, authentication: &str, ) -> i32
fn get_webauthn_auth_challenge_by_id(&self, auth_id: i32) -> Option<String>
Sourcefn login(
&self,
session: Option<&str>,
username: &str,
password: &str,
) -> Result<String, ()>
fn login( &self, session: Option<&str>, username: &str, password: &str, ) -> Result<String, ()>
Try to login in the user with username
and password
.
Returns a Result
that either contains the new session token for the user if the login was successfull or no
value if the login was not successfull.
fn login_with_code( &self, session: Option<&str>, logincode: &str, ) -> Result<String, ()>
fn login_with_key( &self, session: Option<&str>, cred_id: &str, ) -> Result<String, ()>
fn login_foreign( &self, session: Option<&str>, provider_id: &str, foreign_id: &str, _: (bool, bool, &str, &str, Option<i32>, &Option<String>), ) -> Result<(String, Option<Timespec>), ()>
fn create_user_with_groupcode( &self, session: Option<&str>, groupcode: &str, ) -> Result<String, ()>
fn update_or_create_group_with_users(&self, group: Group, admin: i32)
fn add_admin_to_group(&self, group: &mut Group, admin: i32)
Sourcefn logout(&self, session: &str)
fn logout(&self, session: &str)
Logs out the user identified by session token session
by resetting the uesr’s session token in the database
to NULL
.
fn signup( &self, session_token: &str, username: &str, email: &str, password_hash: String, salt: &str, ) -> SignupResult
fn load_submission( &self, session: &SessionUser, task: i32, subtask: Option<&str>, ) -> Option<Submission>
fn get_all_submissions( &self, session_id: i32, task: i32, subtask: Option<&str>, ) -> Vec<Submission>
fn submit_submission(&self, submission: Submission)
fn get_grade_by_submission(&self, submission_id: i32) -> Grade
fn get_contest_groups_grades( &self, session_id: i32, contest_id: i32, ) -> (Vec<String>, Vec<(Group, Vec<(UserInfo, Vec<Grade>)>)>)
fn get_taskgroup_user_grade(&self, session_id: i32, taskgroup_id: i32) -> Grade
fn get_contest_user_grades( &self, session_id: i32, contest_id: i32, ) -> Vec<Grade>
fn export_contest_results_to_file( &self, contest_id: i32, taskgroups_ids: &[(i32, String)], filename: &str, )
fn insert_contest_annotations( &self, contest_id: i32, annotations: Vec<(i32, Option<String>)>, ) -> i32
Sourcefn get_submission_by_id_complete_shallow_contest(
&self,
submission_id: i32,
) -> Option<(Submission, Task, Taskgroup, Contest)>
fn get_submission_by_id_complete_shallow_contest( &self, submission_id: i32, ) -> Option<(Submission, Task, Taskgroup, Contest)>
Returns the submission identified by submission_id
, together with its grade, task, taskgroup and contest.
Sourcefn get_contest_list(&self) -> Vec<Contest>
fn get_contest_list(&self) -> Vec<Contest>
Returns a Vec
of /all/ contests ever defined.
Sourcefn get_contest_list_with_group_member_participations(
&self,
session_id: i32,
) -> Vec<Contest>
fn get_contest_list_with_group_member_participations( &self, session_id: i32, ) -> Vec<Contest>
Returns a Vec
of contests where participations exist.
Sourcefn get_contest_by_id(&self, contest_id: i32) -> Option<Contest>
fn get_contest_by_id(&self, contest_id: i32) -> Option<Contest>
Returns the contest identified by contest_id
without any associated taskgroups. Panics if the contest does not
exist.
Sourcefn get_contest_by_id_partial(&self, contest_id: i32) -> Option<Contest>
fn get_contest_by_id_partial(&self, contest_id: i32) -> Option<Contest>
Returns the contest identified by contest_id
with associated taskgroups but without any associated tasks of
the taskgroups. Panics if the contest does not exist.
Sourcefn get_contest_by_id_complete(&self, contest_id: i32) -> Option<Contest>
fn get_contest_by_id_complete(&self, contest_id: i32) -> Option<Contest>
Returns the contest identified by contest_id
with associated taskgroups and all associated tasks of the
taskgroups. Panics if the contest does not exist.
Sourcefn get_participation(
&self,
session_id: i32,
contest_id: i32,
) -> Option<Participation>
fn get_participation( &self, session_id: i32, contest_id: i32, ) -> Option<Participation>
Try to get the participation associated to the session id session_id
and the contest id contest_id
.
Returns an Option
that can contain the Participation
if it exists or None
otherwise.
Sourcefn get_own_participation(
&self,
session_id: i32,
contest_id: i32,
) -> Option<Participation>
fn get_own_participation( &self, session_id: i32, contest_id: i32, ) -> Option<Participation>
Try to get the participation associated to the session token session
and the contest id contest_id
.
Returns an Option
that can contain the Participation
if it exists or None
otherwise.
Sourcefn get_all_participations_complete(
&self,
session_id: i32,
) -> Vec<(Participation, Contest)>
fn get_all_participations_complete( &self, session_id: i32, ) -> Vec<(Participation, Contest)>
Collect all the participation associated to the session token session
.
Returns an Vec
that contains pairs of all participations with their associated contests.
fn count_all_stars(&self, session_id: i32) -> i32
fn count_all_stars_by_contest(&self, session_id: i32) -> Vec<(i32, i32)>
fn has_participation_by_contest_file( &self, session_id: i32, location: &str, filename: &str, ) -> bool
Sourcefn new_participation(
&self,
session_id: i32,
contest_id: i32,
team: Option<i32>,
) -> Result<Participation, ()>
fn new_participation( &self, session_id: i32, contest_id: i32, team: Option<i32>, ) -> Result<Participation, ()>
Start a new participation of the session identified by the session token session
for the contest with the
contest id contest_id
. It checks whether the session is allowed to start the participation.
Returns an Result
that either contains the new Participation
if the checks succeded or no value if the
checks failed.
fn get_task_by_id(&self, task_id: i32) -> Option<Task>
fn get_task_by_id_complete( &self, task_id: i32, ) -> Option<(Task, Taskgroup, Contest)>
fn get_submission_to_validate( &self, tasklocation: &str, subtask: Option<&str>, ) -> i32
fn find_next_submission_to_validate(&self, userid: i32, taskgroupid: i32)
fn add_group(&self, group: &mut Group)
fn save_group(&self, group: &mut Group)
fn get_groups(&self, session_id: i32) -> Vec<Group>
fn get_groups_complete(&self, session_id: i32) -> Vec<Group>
fn get_group(&self, session_id: i32) -> Option<Group>
fn group_has_protected_participations(&self, session_id: i32) -> bool
fn get_group_complete(&self, group_id: i32) -> Option<Group>
fn delete_user(&self, user_id: i32)
fn delete_all_users_for_group(&self, group_id: i32)
fn delete_group(&self, group_id: i32)
fn delete_participation(&self, user_id: i32, contest_id: i32)
fn remove_old_users_and_groups( &self, maxstudentage: Timespec, maxteacherage: Option<Timespec>, maxage: Option<Timespec>, ) -> Result<(i32, i32, i32, i32), ()>
fn count_temporary_sessions(&self, maxage: Timespec) -> i32
fn remove_temporary_sessions(&self, maxage: Timespec, limit: Option<u32>)
fn get_search_users( &self, _: (Option<i32>, Option<String>, Option<String>, Option<String>, Option<String>, Option<String>), ) -> Result<Vec<(i32, Option<String>, Option<String>, Option<String>, Option<String>, Option<String>)>, Vec<(i32, String, String, String)>>
fn get_debug_information(&self) -> String
fn reset_all_contest_visibilities(&self)
fn reset_all_taskgroup_visibilities(&self)
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.