db/models/
plagiarism_case.rs1use chrono::{DateTime, Utc};
7use sea_orm::entity::prelude::*;
8use sea_orm::{ActiveValue::Set, DatabaseConnection, EntityTrait, DbErr};
9
10#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
12#[sea_orm(table_name = "plagiarism_cases")]
13pub struct Model {
14 #[sea_orm(primary_key)]
16 pub id: i64,
17
18 pub assignment_id: i64,
20
21 pub submission_id_1: i64,
23
24 pub submission_id_2: i64,
26
27 pub description: String,
29
30 pub status: Status,
32
33 pub similarity: f32,
35
36 pub created_at: DateTime<Utc>,
38
39 pub updated_at: DateTime<Utc>,
41}
42
43#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, sea_orm::strum::Display, sea_orm::strum::EnumString)]
45#[sea_orm(rs_type = "String", db_type = "Text")]
46#[strum(serialize_all = "lowercase", ascii_case_insensitive)]
47pub enum Status {
48 #[sea_orm(string_value = "review")]
50 Review,
51 #[sea_orm(string_value = "flagged")]
53 Flagged,
54 #[sea_orm(string_value = "reviewed")]
56 Reviewed,
57}
58
59#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
61pub enum Relation {
62 #[sea_orm(
63 belongs_to = "super::assignment_submission::Entity",
64 from = "Column::SubmissionId1",
65 to = "super::assignment_submission::Column::Id"
66 )]
67 Submission1,
68
69 #[sea_orm(
70 belongs_to = "super::assignment_submission::Entity",
71 from = "Column::SubmissionId2",
72 to = "super::assignment_submission::Column::Id"
73 )]
74 Submission2,
75}
76
77impl ActiveModelBehavior for ActiveModel {}
78
79impl Model {
80 pub async fn create_case(
92 db: &DatabaseConnection,
93 assignment_id: i64,
94 submission_id_1: i64,
95 submission_id_2: i64,
96 description: &str,
97 similarity: f32,
98 ) -> Result<Self, DbErr> {
99 let now = Utc::now();
100 let active = ActiveModel {
101 assignment_id: Set(assignment_id),
102 submission_id_1: Set(submission_id_1),
103 submission_id_2: Set(submission_id_2),
104 description: Set(description.to_string()),
105 status: Set(Status::Review),
106 similarity: Set(similarity),
107 created_at: Set(now),
108 updated_at: Set(now),
109 ..Default::default()
110 };
111 active.insert(db).await
112 }
113}