pub struct PeerReviewSystem {
pub sessions: HashMap<String, ReviewSession>,
pub reviewers: HashMap<String, Reviewer>,
pub assignments: Vec<ReviewAssignment>,
pub quality_metrics: Vec<ReviewQualityMetric>,
}Expand description
Peer review system manager
Fields§
§sessions: HashMap<String, ReviewSession>Review sessions
reviewers: HashMap<String, Reviewer>Reviewer pool
assignments: Vec<ReviewAssignment>Review assignments
quality_metrics: Vec<ReviewQualityMetric>Review quality metrics
Implementations§
Source§impl PeerReviewSystem
impl PeerReviewSystem
Sourcepub fn create_review_session(
&mut self,
submission_id: &str,
review_type: ReviewType,
criteria: Vec<ReviewCriterion>,
deadline: DateTime<Utc>,
) -> String
pub fn create_review_session( &mut self, submission_id: &str, review_type: ReviewType, criteria: Vec<ReviewCriterion>, deadline: DateTime<Utc>, ) -> String
Create a new review session
Sourcepub fn assign_reviewers(
&mut self,
session_id: &str,
reviewer_ids: &[String],
assignment_method: AssignmentMethod,
) -> Result<Vec<String>>
pub fn assign_reviewers( &mut self, session_id: &str, reviewer_ids: &[String], assignment_method: AssignmentMethod, ) -> Result<Vec<String>>
Assign reviewers to a session.
Skips any reviewer who is unknown or who already has an active
(pending/accepted/completed) assignment for this session – without
this check, calling this twice with overlapping reviewer lists (or
passing a duplicate ID) created two assignments for the same
(session, reviewer) pair, which corrupted the reviews-complete count
in Self::submit_review and double-counted reviewer workload.
Sourcepub fn submit_review(
&mut self,
session_id: &str,
reviewer_id: &str,
review: PeerReview,
) -> Result<()>
pub fn submit_review( &mut self, session_id: &str, reviewer_id: &str, review: PeerReview, ) -> Result<()>
Submit a peer review.
Rejects a second submission from the same reviewer for the same
session: without this check, a duplicate call inflated
session.reviews past the number of distinct assigned reviewers,
which both skewed the meta-review consensus (the same opinion
counted twice) and could prevent reviews.len() == total_assignments
from ever matching (so the session would never reach
ReviewsComplete).
Sourcepub fn generate_meta_review(
&mut self,
session_id: &str,
meta_reviewer_id: &str,
) -> Result<()>
pub fn generate_meta_review( &mut self, session_id: &str, meta_reviewer_id: &str, ) -> Result<()>
Generate meta-review
Sourcepub fn calculate_reviewer_workload(&self, reviewer_id: &str) -> u32
pub fn calculate_reviewer_workload(&self, reviewer_id: &str) -> u32
Calculate reviewer workload
Sourcepub fn get_available_reviewers(&self, expertise_area: &str) -> Vec<&Reviewer>
pub fn get_available_reviewers(&self, expertise_area: &str) -> Vec<&Reviewer>
Get available reviewers for expertise area
Sourcepub fn calculate_review_quality(&self, review: &PeerReview) -> f64
pub fn calculate_review_quality(&self, review: &PeerReview) -> f64
Calculate review quality score
Trait Implementations§
Source§impl Clone for PeerReviewSystem
impl Clone for PeerReviewSystem
Source§fn clone(&self) -> PeerReviewSystem
fn clone(&self) -> PeerReviewSystem
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PeerReviewSystem
impl Debug for PeerReviewSystem
Source§impl Default for PeerReviewSystem
impl Default for PeerReviewSystem
Source§impl<'de> Deserialize<'de> for PeerReviewSystem
impl<'de> Deserialize<'de> for PeerReviewSystem
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>,
Auto Trait Implementations§
impl Freeze for PeerReviewSystem
impl RefUnwindSafe for PeerReviewSystem
impl Send for PeerReviewSystem
impl Sync for PeerReviewSystem
impl Unpin for PeerReviewSystem
impl UnsafeUnpin for PeerReviewSystem
impl UnwindSafe for PeerReviewSystem
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.