Skip to content

Commit

Permalink
add score result when quiz solved
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirill-K-1 committed Feb 27, 2024
1 parent 5683584 commit 9732fd9
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 14 deletions.
7 changes: 5 additions & 2 deletions gov-portal-db/src/quiz.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,10 @@ impl Quiz {
.cloned()
.unwrap_or_default()
{
QuizResult::Solved
QuizResult::Solved(
total_valid_answers,
self.config.minimum_total_valid_answers_required,
)
} else {
QuizResult::Failed(
total_valid_answers,
Expand Down Expand Up @@ -381,7 +384,7 @@ mod tests {
{
match serde_json::from_str::<Vec<QuizAnswer>>(input) {
Ok(answers) => assert_eq!(
quiz.verify_answers(answers) == QuizResult::Solved,
matches!(quiz.verify_answers(answers), QuizResult::Solved(..)),
expected,
"Test case #{i} '{title}' failed!"
),
Expand Down
2 changes: 1 addition & 1 deletion gov-portal-db/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ async fn verify_quiz_route(
}
| UserProfileStatus::Complete(_),
..
}) => Ok(QuizResult::Solved),
}) => Ok(QuizResult::AlreadySolved),
// Do not allow to solve quiz if temporarily blocked
Ok(UserProfile {
status: UserProfileStatus::Blocked { blocked_until },
Expand Down
33 changes: 23 additions & 10 deletions gov-portal-db/src/users_manager/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ impl Default for UserProfileAttributes {

#[derive(Debug, PartialEq)]
pub enum QuizResult {
Solved,
Solved(u64, u64),
Failed(u64, u64, DateTime<Utc>),
AlreadySolved,
}

impl Serialize for QuizResult {
Expand All @@ -99,14 +100,20 @@ impl Serialize for QuizResult {
S: Serializer,
{
match self {
Self::Solved => serializer.serialize_none(),
Self::Solved(valid_answers, required_answers) => {
let mut seq = serializer.serialize_seq(Some(2))?;
seq.serialize_element(valid_answers)?;
seq.serialize_element(required_answers)?;
seq.end()
}
Self::Failed(valid_answers, required_answers, blocked_until) => {
let mut seq = serializer.serialize_seq(Some(3))?;
seq.serialize_element(valid_answers)?;
seq.serialize_element(required_answers)?;
seq.serialize_element(&blocked_until.timestamp_millis())?;
seq.end()
}
Self::AlreadySolved => serializer.serialize_none(),
}
}
}
Expand Down Expand Up @@ -225,12 +232,8 @@ impl UsersManager {
wallet: Address,
quiz_result: &QuizResult,
) -> Result<(), error::Error> {
let query = doc! {
"wallet": bson::to_bson(&wallet)?,
};

let update = match quiz_result {
QuizResult::Solved => {
QuizResult::Solved(..) => {
doc! {
"$set": bson::to_bson(&RawUserProfile {
quiz_solved: Some(true),
Expand Down Expand Up @@ -268,6 +271,11 @@ impl UsersManager {
})?
}
}
QuizResult::AlreadySolved => return Ok(()),
};

let query = doc! {
"wallet": bson::to_bson(&wallet)?,
};

let options = UpdateOptions::builder().upsert(false).build();
Expand Down Expand Up @@ -449,8 +457,8 @@ mod tests {
#[test]
fn test_ser_quiz_result() {
assert_matches!(
serde_json::to_string(&QuizResult::Solved).as_deref(),
Ok("null")
serde_json::to_string(&QuizResult::Solved(4, 5)).as_deref(),
Ok("[4,5]")
);

assert_matches!(
Expand All @@ -462,7 +470,12 @@ mod tests {
)
))
.as_deref(),
Ok(r#"[3,5,1708997209002]"#)
Ok("[3,5,1708997209002]")
);

assert_matches!(
serde_json::to_string(&QuizResult::AlreadySolved).as_deref(),
Ok("null")
);
}

Expand Down
2 changes: 1 addition & 1 deletion gov-portal-db/tests/test_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ async fn test_complete_profile() -> Result<(), anyhow::Error> {
.unwrap(),
]);

assert_matches!(quiz_result, QuizResult::Solved);
assert_matches!(quiz_result, QuizResult::Solved(2, 2));

let addr_1 = Address::from_low_u64_le(0);

Expand Down

0 comments on commit 9732fd9

Please sign in to comment.