pub enum ReviewingStage {
NotStarted,
PeerReview,
SelfReview,
WaitingForPeerReviews,
WaitingForManualGrading,
ReviewedAndLocked,
}
Expand description
Tells what stage of reviewing the user is currently in. Used for for peer review, self review, and manual review. If an exercise does not involve reviewing, the value of this stage will always be NotStarted
.
Variants§
NotStarted
In this stage the user submits answers to the exercise. If the exercise allows it, the user can answer the exercise multiple times. If the exercise is not in this stage, the user cannot answer the exercise. Most exercises will never leave this stage because other stages are reseverved for situations when we cannot give the user points just based on the automatic gradings.
PeerReview
In this stage the student is instructed to give peer reviews to other students.
SelfReview
In this stage the student is instructed to review their own answer.
WaitingForPeerReviews
In this stage the student has completed the neccessary peer and self reviews but is waiting for other students to peer review their answer before we can give points for this exercise.
WaitingForManualGrading
In this stage the student has completed everything they need to do, but before we can give points for this exercise, we need a manual grading from the teacher.
Reasons for ending up in this stage may be one of these:
- The exercise is configured to require all answers to be reviewed by the teacher.
- The answer has received poor reviews from the peers, and the exercise has been configured so that the teacher has to double-check whether it is justified to not give full points to the student.
ReviewedAndLocked
In this stage the the reviews have been completed and the points have been awarded to the student. However, since the answer had to go though the review process, the student may no longer answer the exercise since because
- It is likely that we revealed the model solution to the student during the review process.
- In case of peer review, a new answer would have to be reviewed by other students again, and that would be unreasonable extra work for others.
If the teacher for some reasoon feels bad for the student and wants to give them a new chance, the answers for this exercise should be reset, the reason should be recorded somewhere in the database, and the value of this column should be set to NotStarted
. Deleting the whole user_exercise_state may also be wise. However, if we end up doing this for a teacher, we should make sure that the teacher realizes that they should not give an unfair advantage to anyone.
Trait Implementations§
Source§impl Clone for ReviewingStage
impl Clone for ReviewingStage
Source§fn clone(&self) -> ReviewingStage
fn clone(&self) -> ReviewingStage
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ReviewingStage
impl Debug for ReviewingStage
Source§impl<'r> Decode<'r, Postgres> for ReviewingStage
impl<'r> Decode<'r, Postgres> for ReviewingStage
Source§impl<'de> Deserialize<'de> for ReviewingStage
impl<'de> Deserialize<'de> for ReviewingStage
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for ReviewingStage
impl Display for ReviewingStage
Source§impl<'q, DB: Database> Encode<'q, DB> for ReviewingStage
impl<'q, DB: Database> Encode<'q, DB> for ReviewingStage
Source§fn encode_by_ref(
&self,
buf: &mut <DB as Database>::ArgumentBuffer<'q>,
) -> Result<IsNull, BoxDynError>
fn encode_by_ref( &self, buf: &mut <DB as Database>::ArgumentBuffer<'q>, ) -> Result<IsNull, BoxDynError>
fn size_hint(&self) -> usize
Source§fn encode(
self,
buf: &mut <DB as Database>::ArgumentBuffer<'q>,
) -> Result<IsNull, Box<dyn Error + Send + Sync>>where
Self: Sized,
fn encode(
self,
buf: &mut <DB as Database>::ArgumentBuffer<'q>,
) -> Result<IsNull, Box<dyn Error + Send + Sync>>where
Self: Sized,
self
into buf
in the expected format for the database.fn produces(&self) -> Option<<DB as Database>::TypeInfo>
Source§impl PartialEq for ReviewingStage
impl PartialEq for ReviewingStage
Source§impl PgHasArrayType for ReviewingStage
impl PgHasArrayType for ReviewingStage
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
Source§impl Serialize for ReviewingStage
impl Serialize for ReviewingStage
Source§impl Type<Postgres> for ReviewingStage
impl Type<Postgres> for ReviewingStage
impl Copy for ReviewingStage
impl Eq for ReviewingStage
impl StructuralPartialEq for ReviewingStage
Auto Trait Implementations§
impl Freeze for ReviewingStage
impl RefUnwindSafe for ReviewingStage
impl Send for ReviewingStage
impl Sync for ReviewingStage
impl Unpin for ReviewingStage
impl UnwindSafe for ReviewingStage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more