Skip to main content

tdm_server_rust/entity/
questionnaire.rs

1//! 问卷实体 (Questionnaire Entity)
2//!
3//! 组员接稿意愿问卷调查,映射 `t_questionnaire` 表。
4//! 用于组长分配任务时了解组员偏好和限制。
5
6use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8
9/// 组员接稿意愿问卷 (Questionnaire)
10///
11/// 记录组员的:
12/// - 接稿意愿强度 (1=随时, 2=有限, 3=暂不)
13/// - 可接受篇幅和更新频率
14/// - 偏好题材和雷区
15///
16/// 对应 Java `Questionnaire` 实体。
17#[derive(Debug, Clone, Serialize, Deserialize, Default)]
18#[serde(rename_all = "camelCase")]
19pub struct Questionnaire {
20    /// 主键 ID
21    pub id: Option<i64>,
22    /// 组员 ID
23    #[serde(default)]
24    pub member_id: Option<i32>,
25    /// 接稿意愿:1-随时可接,2-有限接稿,3-暂不接稿
26    pub willingness: Option<i16>,
27    /// 能接受的单篇篇幅(逗号分隔)
28    pub acceptable_lengths: Option<String>,
29    /// 能接受的更新频率:1-每周多更,2-每周一更,3-两周一更,4-不定期
30    pub update_frequency: Option<i16>,
31    /// 喜欢的题材(逗号分隔)
32    pub preferred_genres: Option<String>,
33    /// 雷区(逗号分隔)
34    pub avoid_topics: Option<String>,
35    /// 补充说明
36    pub note: Option<String>,
37    /// 管理员备注
38    pub remark: Option<String>,
39    /// 上次派稿时间
40    pub last_assigned_time: Option<DateTime<Utc>>,
41    /// 创建时间
42    pub created_at: Option<DateTime<Utc>>,
43    /// 更新时间
44    pub updated_at: Option<DateTime<Utc>>,
45}
46
47#[cfg(test)]
48mod tests {
49    use super::*;
50
51    /// 校验前端提交 JSON 可反序列化
52    #[test]
53    fn deserialize_submit_body() {
54        let json = r#"{
55            "willingness": 3,
56            "acceptableLengths": "short,medium",
57            "updateFrequency": 2,
58            "preferredGenres": "日常",
59            "avoidTopics": "恐怖",
60            "note": "补充"
61        }"#;
62        let q: Questionnaire = serde_json::from_str(json).expect("应能反序列化");
63        assert_eq!(q.willingness, Some(3));
64        assert_eq!(q.acceptable_lengths.as_deref(), Some("short,medium"));
65        assert_eq!(q.update_frequency, Some(2));
66    }
67}