Skip to content

Commit

Permalink
feat: add judge_time to judge
Browse files Browse the repository at this point in the history
  • Loading branch information
zrll12 committed Aug 25, 2024
1 parent 7aa00a2 commit cfae3da
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 15 deletions.
11 changes: 2 additions & 9 deletions src/controller/judge/start.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,10 @@ use crate::model::judge::{get_judge_result};

pub async fn auto_judge(Query(query): Query<JudgeRequest>, AdminTokenInfo(admin): AdminTokenInfo) -> Result<String, ErrorMessage> {
info!("Admin {} is judging answer {}", admin.id, query.answer);

let (scores, user, full, completed) = get_judge_result(query.answer, admin.id).await?;

let response = JudgeResponse {
full,
user,
scores,
completed
};
let result = get_judge_result(query.answer, admin.id).await?;

Ok(serde_json::to_string(&response).unwrap())
Ok(serde_json::to_string(&result).unwrap())
}

#[derive(Deserialize)]
Expand Down
37 changes: 31 additions & 6 deletions src/model/judge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ use crate::model::question::Question;
use crate::service::judge::judge_subjectives;
use crate::service::questions::get_question_by_id;
use crate::DATABASE;
use chrono::Utc;
use chrono::{NaiveDateTime, Utc};
use sea_orm::ActiveValue::Set;
use sea_orm::{ActiveModelTrait, ColumnTrait, NotSet};
use sea_orm::{EntityTrait, QueryFilter};
use serde::Serialize;
use std::collections::HashMap;
use uuid::Uuid;

pub async fn get_judge_result(answer: i32, judge: i64) -> Result<(HashMap<Uuid, i32>, i32, i32, bool), ErrorMessage> {
pub async fn get_judge_result(answer: i32, judge: i64) -> Result<JudgeResult, ErrorMessage> {
let score = score::Entity::find()
.filter(score::Column::Id.eq(answer))
.one(&*DATABASE)
Expand All @@ -22,15 +23,22 @@ pub async fn get_judge_result(answer: i32, judge: i64) -> Result<(HashMap<Uuid,
if let Some(res) = score {
let score: HashMap<Uuid, i32> = serde_json::from_value(res.scores).unwrap();

return Ok((score, res.user_score, res.full_score, res.completed));
return Ok(JudgeResult {
full: res.full_score,
user: res.user_score,
scores: score,
completed: res.completed,
judge: res.judge,
judge_time: res.judge_time,
});
}

let result = auto_judge(answer, judge).await?;

Ok((result.0, result.1, result.2, false))
Ok(result)
}

async fn auto_judge(answer: i32, judge: i64) -> Result<(HashMap<Uuid, i32>, i32, i32), ErrorMessage> {
async fn auto_judge(answer: i32, judge: i64) -> Result<JudgeResult, ErrorMessage> {
let answer = Answer::find()
.filter(crate::model::generated::answer::Column::Id.eq(answer))
.one(&*DATABASE).await.unwrap().unwrap();
Expand Down Expand Up @@ -62,7 +70,14 @@ async fn auto_judge(answer: i32, judge: i64) -> Result<(HashMap<Uuid, i32>, i32,

save_judge_result(&scores, answer.user, judge, answer.id, user, full, false).await?;

Ok((scores, user, full))
Ok(JudgeResult {
full,
user,
scores,
completed: false,
judge,
judge_time: Utc::now().naive_utc(),
})
}

async fn save_judge_result(
Expand Down Expand Up @@ -92,4 +107,14 @@ async fn save_judge_result(
}

Ok(())
}

#[derive(Serialize)]
pub struct JudgeResult {
pub full: i32,
pub user: i32,
pub scores: HashMap<Uuid, i32>,
pub completed: bool,
pub judge: i64,
pub judge_time: NaiveDateTime,
}

0 comments on commit cfae3da

Please sign in to comment.