algohub_server/models/
account.rs

1use serde::{Deserialize, Serialize};
2use surrealdb::sql::Thing;
3
4#[derive(Default, Serialize, Deserialize)]
5pub struct Account {
6    pub id: Option<Thing>,
7    pub username: String,
8    pub password: String,
9    pub email: String,
10    pub avatar: Option<String>,
11    pub signature: Option<String>,
12    pub links: Option<Vec<String>>,
13
14    pub nickname: Option<String>,
15    pub sex: Option<bool>,
16    pub birthday: Option<chrono::NaiveDateTime>,
17
18    pub name: Option<String>,
19    pub student_id: Option<String>,
20    pub school: Option<String>,
21    pub college: Option<String>,
22    pub major: Option<String>,
23
24    pub rating: i32,
25    pub active: bool,
26
27    pub created_at: chrono::NaiveDateTime,
28    pub updated_at: chrono::NaiveDateTime,
29}
30
31#[derive(Serialize, Deserialize)]
32#[serde(crate = "rocket::serde")]
33pub struct Register {
34    pub username: String,
35    pub email: String,
36    pub password: String,
37}
38
39#[derive(Deserialize)]
40pub struct Login<'r> {
41    pub identity: &'r str,
42    pub password: &'r str,
43}
44
45#[derive(Serialize, Deserialize, Clone, Debug)]
46#[serde(crate = "rocket::serde")]
47pub struct Profile {
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub username: Option<String>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub email: Option<String>,
52
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub avatar: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub signature: Option<String>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub links: Option<Vec<String>>,
59
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub nickname: Option<String>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub sex: Option<bool>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub birthday: Option<chrono::NaiveDateTime>,
66
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub name: Option<String>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub student_id: Option<String>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub school: Option<String>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub college: Option<String>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub major: Option<String>,
77
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub rating: Option<i8>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub active: Option<bool>,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct Session {
86    pub id: Option<Thing>,
87    pub account_id: Thing,
88    pub token: String,
89}
90
91#[derive(Serialize, Deserialize, Clone, Debug)]
92#[serde(crate = "rocket::serde")]
93pub struct MergeProfile<'r> {
94    pub id: &'r str,
95    pub token: &'r str,
96    pub profile: Profile,
97}