use serde::{Deserialize, Serialize};
use sqlx::FromRow;
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
pub struct RatingRecord {
#[serde(skip_serializing_if = "Option::is_none")]
pub rating_id: Option<i64>,
pub scan_id: i64,
pub category: String, pub score: i32, pub grade: Option<String>, pub rationale: Option<String>,
}
impl RatingRecord {
pub fn new(scan_id: i64, category: String, score: u8) -> Self {
Self {
rating_id: None,
scan_id,
category,
score: score as i32,
grade: None,
rationale: None,
}
}
pub fn with_grade(mut self, grade: String) -> Self {
self.grade = Some(grade);
self
}
pub fn with_rationale(mut self, rationale: String) -> Self {
self.rationale = Some(rationale);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_rating_record_creation() {
let rating = RatingRecord::new(1, "certificate".to_string(), 90)
.with_grade("A".to_string())
.with_rationale("Strong certificate".to_string());
assert_eq!(rating.scan_id, 1);
assert_eq!(rating.category, "certificate");
assert_eq!(rating.score, 90);
assert_eq!(rating.grade, Some("A".to_string()));
}
}