-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Store rejected submissions for helping to debug why they were rejecte…
…d. (#1276) * WIP migration * Add table, and prepare code * Store rejected submissions for debugging purposes * Clippy fixes * Save rejected submissions for debugging purposes
- Loading branch information
Showing
13 changed files
with
171 additions
and
13 deletions.
There are no files selected for viewing
2 changes: 2 additions & 0 deletions
2
services/headless-lms/migrations/20240521125646_store-rejected-submissions.down.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
DROP TABLE rejected_exercise_task_submissions; | ||
DROP TABLE rejected_exercise_slide_submissions; |
34 changes: 34 additions & 0 deletions
34
services/headless-lms/migrations/20240521125646_store-rejected-submissions.up.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
CREATE TABLE rejected_exercise_slide_submissions ( | ||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, | ||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), | ||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), | ||
deleted_at TIMESTAMP WITH TIME ZONE, | ||
user_id UUID NOT NULL REFERENCES users(id), | ||
exercise_slide_id UUID NOT NULL REFERENCES exercise_slides(id) | ||
); | ||
CREATE TRIGGER set_timestamp BEFORE | ||
UPDATE ON rejected_exercise_slide_submissions FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp(); | ||
COMMENT ON TABLE rejected_exercise_slide_submissions IS 'If an exercise slide submission is rejected, the submission is stored here. Rejections happen usually when there is some bug in the exercise service. This data if used for diagnosing problems.'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.id IS 'A unique, stable identifier for the record.'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.created_at IS 'Timestamp when the record was created.'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.updated_at IS 'Timestamp when the record was last updated. The field is updated automatically by the set_timestamp trigger.'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.deleted_at IS 'Timestamp when the record was deleted. If null, the record is not deleted.'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.user_id IS 'The user who submitted the exercise'; | ||
COMMENT ON COLUMN rejected_exercise_slide_submissions.exercise_slide_id IS 'The exercise slide that was submitted'; | ||
CREATE TABLE rejected_exercise_task_submissions ( | ||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, | ||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), | ||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), | ||
deleted_at TIMESTAMP WITH TIME ZONE, | ||
rejected_exercise_slide_submission_id UUID NOT NULL REFERENCES rejected_exercise_slide_submissions(id), | ||
data_json JSONB NOT NULL | ||
); | ||
CREATE TRIGGER set_timestamp BEFORE | ||
UPDATE ON rejected_exercise_task_submissions FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp(); | ||
COMMENT ON TABLE rejected_exercise_task_submissions IS 'If an exercise task submission is rejected, the submission is stored here. Rejections happen usually when there is some bug in the exercise service. This data if used for diagnosing problems.'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.id IS 'A unique, stable identifier for the record.'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.created_at IS 'Timestamp when the record was created.'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.updated_at IS 'Timestamp when the record was last updated. The field is updated automatically by the set_timestamp trigger.'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.deleted_at IS 'Timestamp when the record was deleted. If null, the record is not deleted.'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.rejected_exercise_slide_submission_id IS 'The rejected exercise slide submission that this task submission is related to'; | ||
COMMENT ON COLUMN rejected_exercise_task_submissions.data_json IS 'The contents of the failed sumbission'; |
18 changes: 18 additions & 0 deletions
18
.../models/.sqlx/query-a84a8c368b478f84639a29031deb0b98ed2e750154d3c802a4728b9e269345a1.json
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
18 changes: 18 additions & 0 deletions
18
.../models/.sqlx/query-cec6fa9b6a186076ff43935930627abd3db4f13c50f37c4998d67bafc26b6c46.json
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
60 changes: 60 additions & 0 deletions
60
services/headless-lms/models/src/rejected_exercise_slide_submissions.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
use crate::{ | ||
library::grading::{StudentExerciseSlideSubmission, StudentExerciseTaskSubmission}, | ||
prelude::*, | ||
}; | ||
|
||
#[derive(Clone, PartialEq, Deserialize, Serialize)] | ||
pub struct RejectedExerciseSlideSubmission { | ||
pub id: Uuid, | ||
pub created_at: DateTime<Utc>, | ||
pub updated_at: DateTime<Utc>, | ||
pub deleted_at: Option<DateTime<Utc>>, | ||
pub user_id: Uuid, | ||
pub exercise_slide_id: Uuid, | ||
} | ||
|
||
pub async fn insert_rejected_exercise_slide_submission( | ||
conn: &mut PgConnection, | ||
rejected_submission: &StudentExerciseSlideSubmission, | ||
user_id: Uuid, | ||
) -> ModelResult<Uuid> { | ||
let mut tx = conn.begin().await?; | ||
let res = sqlx::query!( | ||
" | ||
INSERT INTO rejected_exercise_slide_submissions (user_id, exercise_slide_id) | ||
VALUES ($1, $2) | ||
RETURNING id | ||
", | ||
user_id, | ||
rejected_submission.exercise_slide_id, | ||
) | ||
.fetch_one(&mut *tx) | ||
.await?; | ||
|
||
for task in &rejected_submission.exercise_task_submissions { | ||
insert_rejected_exercise_task_submission(&mut tx, task, res.id).await?; | ||
} | ||
|
||
tx.commit().await?; | ||
Ok(res.id) | ||
} | ||
|
||
/// Used internally only by the `insert_rejected_exercise_slide_submission` function. | ||
async fn insert_rejected_exercise_task_submission( | ||
conn: &mut PgConnection, | ||
rejected_submission: &StudentExerciseTaskSubmission, | ||
exercise_slide_submission_id: Uuid, | ||
) -> ModelResult<Uuid> { | ||
let res = sqlx::query!( | ||
" | ||
INSERT INTO rejected_exercise_task_submissions (rejected_exercise_slide_submission_id, data_json) | ||
VALUES ($1, $2) | ||
RETURNING id | ||
", | ||
exercise_slide_submission_id, | ||
rejected_submission.data_json, | ||
) | ||
.fetch_one(&mut *conn) | ||
.await?; | ||
Ok(res.id) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters