1use chrono::{DateTime, Utc};
10use serde::{Deserialize, Serialize};
11
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub struct Post {
22 pub post: i32,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, Default)]
41#[serde(rename_all = "camelCase")]
42pub struct Member {
43 #[serde(alias = "Id")]
45 pub id: i32,
46 pub username: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub password: Option<String>,
51 pub intern: i16,
53 pub email: Option<String>,
55 pub registration_time: Option<DateTime<Utc>>,
57 pub last_submit_time: Option<DateTime<Utc>>,
59 #[serde(default)]
61 pub posts: Vec<Post>,
62 #[serde(default)]
64 pub post_ids: Vec<i32>,
65 #[serde(default)]
67 pub station_count: Option<i32>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub station_id: Option<i32>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub post: Option<i32>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub status: Option<i16>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub manga_id: Option<i32>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub manga_name: Option<String>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87#[serde(rename_all = "camelCase")]
88pub struct MemberListVo {
89 pub username: Option<String>,
91 pub id: i32,
93 pub posts: Vec<Post>,
95 pub intern: i16,
97 pub last_submit_time: Option<DateTime<Utc>>,
99 pub registration_time: Option<DateTime<Utc>>,
101 pub email: Option<String>,
103 pub station_count: Option<i32>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct MemberInfoVo {
111 pub id: i32,
113 pub username: Option<String>,
115 pub posts: Vec<Post>,
117 pub post_ids: Vec<i32>,
119 pub intern: i16,
121 pub last_submit_time: Option<DateTime<Utc>>,
123 pub registration_time: Option<DateTime<Utc>>,
125 pub email: Option<String>,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct MemberCache {
133 #[serde(alias = "Id")]
135 pub id: i32,
136 pub username: Option<String>,
138 pub intern: i16,
140 pub email: Option<String>,
142 pub posts: Vec<i32>,
144}
145
146#[derive(Debug, Deserialize)]
154pub struct MemberLoginRequest {
155 pub username: String,
157 pub password: String,
159}
160
161#[derive(Debug, Deserialize)]
163pub struct Reg {
164 pub id: Option<i32>,
166 pub username: String,
168 pub email: String,
170 pub password: String,
172 pub invitationcode: i32,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct InvitationCode {
179 pub id: Option<i32>,
181 pub code: i32,
183}
184
185#[derive(Debug, Deserialize)]
187pub struct ResetPassword {
188 pub id: i32,
190 pub old_pwd: String,
192 pub new_pwd: String,
194}
195
196#[derive(Debug, Clone, Deserialize, Serialize)]
204#[serde(rename_all = "camelCase")]
205pub struct MemberEpisode {
206 pub member_id: i32,
208 pub episode_id: i32,
210 pub my_name: String,
212 #[serde(skip_serializing_if = "Option::is_none")]
214 pub my_setup_time: Option<DateTime<Utc>>,
215 #[serde(skip_serializing_if = "Option::is_none")]
217 pub my_update_time: Option<DateTime<Utc>>,
218}
219
220#[derive(Debug, Deserialize)]
222#[serde(rename_all = "camelCase")]
223pub struct MemberAddRequest {
224 pub username: String,
226 pub password: String,
228 pub email: String,
230 pub intern: i16,
232 pub post_ids: Vec<i32>,
234}
235
236#[derive(Debug, Deserialize)]
238#[serde(rename_all = "camelCase")]
239pub struct MemberUpdateRequest {
240 pub id: i32,
242 pub username: Option<String>,
244 pub password: Option<String>,
246 pub email: Option<String>,
248 pub intern: Option<i16>,
250 pub post_ids: Option<Vec<i32>>,
252 pub string_posts: Option<Vec<String>>,
254}
255
256#[derive(Debug, Deserialize)]
258#[serde(rename_all = "camelCase")]
259pub struct MemberSelfUpdateRequest {
260 pub id: i32,
262 pub username: Option<String>,
264 pub email: Option<String>,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize, Default)]
275#[serde(rename_all = "camelCase")]
276pub struct MemberEpisodeVo {
277 pub id: i32,
279 pub manga_id: i32,
281 pub manga_name: Option<String>,
283 pub manga_episode: Option<String>,
285 pub manga_episode_name: Option<String>,
287 pub setup_time: Option<DateTime<Utc>>,
289 pub update_time: Option<DateTime<Utc>>,
291 pub provider_id: Option<i32>,
293 pub provider_name: Option<String>,
295 pub provider_setup_time: Option<DateTime<Utc>>,
297 pub provider_update_time: Option<DateTime<Utc>>,
299 pub translator_id: Option<i32>,
301 pub translator_name: Option<String>,
303 pub translator_setup_time: Option<DateTime<Utc>>,
305 pub translator_update_time: Option<DateTime<Utc>>,
307 pub proofreader_id: Option<i32>,
309 pub proofreader_name: Option<String>,
311 pub proofreader_setup_time: Option<DateTime<Utc>>,
313 pub proofreader_update_time: Option<DateTime<Utc>>,
315 pub letterer_id: Option<i32>,
317 pub letterer_name: Option<String>,
319 pub letterer_setup_time: Option<DateTime<Utc>>,
321 pub letterer_update_time: Option<DateTime<Utc>>,
323 pub timer_id: Option<i32>,
325 pub timer_name: Option<String>,
327 pub timer_setup_time: Option<DateTime<Utc>>,
329 pub timer_update_time: Option<DateTime<Utc>>,
331 pub reviewer_id: Option<i32>,
333 pub reviewer_name: Option<String>,
335 pub reviewer_setup_time: Option<DateTime<Utc>>,
337 pub reviewer_update_time: Option<DateTime<Utc>>,
339 pub provider_file_oss_id: Option<i32>,
341 pub provider_filename: Option<String>,
343 pub translator_file_oss_id: Option<i32>,
345 pub translator_filename: Option<String>,
347 pub proofreader_file_oss_id: Option<i32>,
349 pub proofreader_filename: Option<String>,
351 pub letterer_file_oss_id: Option<i32>,
353 pub letterer_filename: Option<String>,
355 pub timer_file_oss_id: Option<i32>,
357 pub timer_filename: Option<String>,
359 pub translator_file: Option<String>,
361 pub proofreader_file: Option<String>,
363 pub timer_file: Option<String>,
365}
366
367#[derive(Debug, Clone, Serialize, Deserialize)]
369#[serde(rename_all = "camelCase")]
370pub struct StationedManga {
371 #[serde(flatten)]
373 pub manga: crate::entity::manga::MangaResponse,
374 pub posts: Vec<i32>,
376}
377
378impl From<Member> for MemberListVo {
379 fn from(m: Member) -> Self {
380 Self {
381 username: m.username,
382 id: m.id,
383 posts: m.posts,
384 intern: m.intern,
385 last_submit_time: m.last_submit_time,
386 registration_time: m.registration_time,
387 email: m.email,
388 station_count: m.station_count,
389 }
390 }
391}
392
393impl From<Member> for MemberInfoVo {
394 fn from(m: Member) -> Self {
395 Self {
396 id: m.id,
397 username: m.username,
398 posts: m.posts,
399 post_ids: m.post_ids,
400 intern: m.intern,
401 last_submit_time: m.last_submit_time,
402 registration_time: m.registration_time,
403 email: m.email,
404 }
405 }
406}