1use chrono::{DateTime, Utc};
12use serde::{Deserialize, Serialize};
13
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
19#[serde(rename_all = "camelCase")]
20pub struct Mangatb {
21 pub id: Option<i32>,
23 pub manga_tran_name: Option<String>,
25 pub manga_ori_name: Option<String>,
27 pub image: Option<String>,
29 pub category: Option<i32>,
31 pub manga_status: Option<i32>,
33 pub setup_time: Option<DateTime<Utc>>,
35 pub update_time: Option<DateTime<Utc>>,
37 pub link: Option<String>,
39 pub introduction: Option<String>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, Default)]
50#[serde(rename_all = "camelCase")]
51pub struct MangaCardVo {
52 pub id: i32,
54 pub manga_tran_name: Option<String>,
56 pub manga_ori_name: Option<String>,
58 pub image: Option<String>,
60 pub category: Option<i16>,
62 pub manga_status: Option<i16>,
64 pub update_time: Option<DateTime<Utc>>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub author_name: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub author_name2: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub author_id2: Option<i32>,
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub magazine_name: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub translator_setup_time: Option<DateTime<Utc>>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub translator_update_time: Option<DateTime<Utc>>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub proofreader_setup_time: Option<DateTime<Utc>>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub proofreader_update_time: Option<DateTime<Utc>>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub letterer_setup_time: Option<DateTime<Utc>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub letterer_update_time: Option<DateTime<Utc>>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub reviewer_setup_time: Option<DateTime<Utc>>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub reviewer_update_time: Option<DateTime<Utc>>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub timer_setup_time: Option<DateTime<Utc>>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub timer_update_time: Option<DateTime<Utc>>,
108}
109
110pub type MangaListVo = MangaCardVo;
112
113#[derive(Debug, Clone, Serialize, Deserialize, Default)]
115#[serde(rename_all = "camelCase")]
116pub struct MangaSimpleVo {
117 pub id: i32,
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub manga_tran_name: Option<String>,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub manga_ori_name: Option<String>,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize, Default)]
129#[serde(rename_all = "camelCase")]
130pub struct MangaDetailVo {
131 pub id: i32,
133 pub manga_tran_name: Option<String>,
135 pub manga_ori_name: Option<String>,
137 pub image: Option<String>,
139 pub category: Option<i16>,
141 pub manga_status: Option<i16>,
143 pub setup_time: Option<DateTime<Utc>>,
145 pub update_time: Option<DateTime<Utc>>,
147 pub link: Option<String>,
149 pub introduction: Option<String>,
151 pub author_name: Option<String>,
153 pub author_id: Option<i32>,
155 pub author_name2: Option<String>,
157 pub author_id2: Option<i32>,
159 pub magazine_name: Option<String>,
161 pub magazine_id: Option<i32>,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize, Default)]
167#[serde(rename_all = "camelCase")]
168pub struct MangaResponse {
169 pub id: Option<i32>,
171 pub manga_tran_name: Option<String>,
173 pub manga_ori_name: Option<String>,
175 pub image: Option<String>,
177 pub category: Option<i16>,
179 pub manga_status: Option<i16>,
181 pub setup_time: Option<DateTime<Utc>>,
183 pub update_time: Option<DateTime<Utc>>,
185 pub link: Option<String>,
187 pub introduction: Option<String>,
189 pub author_name: Option<String>,
191 pub author_id: Option<i32>,
193 pub author_name2: Option<String>,
195 pub author_id2: Option<i32>,
197 pub magazine_name: Option<String>,
199 pub magazine_id: Option<i32>,
201 pub translator_setup_time: Option<DateTime<Utc>>,
203 pub translator_update_time: Option<DateTime<Utc>>,
205 pub proofreader_setup_time: Option<DateTime<Utc>>,
207 pub proofreader_update_time: Option<DateTime<Utc>>,
209 pub letterer_setup_time: Option<DateTime<Utc>>,
211 pub letterer_update_time: Option<DateTime<Utc>>,
213 pub reviewer_setup_time: Option<DateTime<Utc>>,
215 pub reviewer_update_time: Option<DateTime<Utc>>,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize, Default)]
221#[serde(rename_all = "camelCase")]
222pub struct Manga {
223 #[serde(rename = "Id")]
225 pub id: Option<i32>,
226 pub manga_tran_name: Option<String>,
228 pub manga_ori_name: Option<String>,
230 pub category: Option<i16>,
232 pub manga_status: Option<i16>,
234 pub img_url: Option<String>,
236 pub link: Option<String>,
238 pub introduction: Option<String>,
240 pub update_time: Option<DateTime<Utc>>,
242}
243
244#[derive(Debug, Clone, Serialize, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct MangaCollect {
248 pub id: Option<i32>,
250 pub manga_id: i32,
252 pub member_id: i32,
254}
255
256#[derive(Debug, Clone, Serialize, Deserialize, Default)]
258#[serde(rename_all = "camelCase")]
259pub struct CollectedMembersVo {
260 pub id: i32,
262 pub username: Option<String>,
264 pub intern: i16,
266 pub posts: Vec<crate::entity::member::Post>,
268 pub station_count: Option<i32>,
270 pub registration_time: Option<DateTime<Utc>>,
272 pub last_submit_time: Option<DateTime<Utc>>,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize, Default)]
281#[serde(rename_all = "camelCase")]
282pub struct GlossaryVo {
283 pub id: i32,
285 pub title: Option<String>,
287 pub content: Option<String>,
289 pub image: Option<String>,
291 pub r#type: Option<i16>,
293 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
295 pub manga_id: Option<i16>,
296 pub first: Option<String>,
298 pub update_time: Option<DateTime<Utc>>,
300 pub update_by: Option<i32>,
302 pub update_member_name: Option<String>,
304}
305
306#[derive(Debug, Clone, Deserialize, Default)]
308#[serde(rename_all = "camelCase")]
309pub struct GlossaryRequest {
310 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
312 pub id: Option<i32>,
313 pub title: Option<String>,
315 pub content: Option<String>,
317 pub image: Option<String>,
319 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
321 pub r#type: Option<i16>,
322 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
324 pub manga_id: Option<i16>,
325 pub first: Option<String>,
327 pub update_time: Option<DateTime<Utc>>,
329 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
331 pub update_by: Option<i32>,
332 pub update_member_name: Option<String>,
334}
335
336#[derive(Debug, Clone, Deserialize, Default)]
338#[serde(rename_all = "camelCase")]
339pub struct MangaUpdateRequest {
340 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
342 pub id: Option<i32>,
343 pub manga_tran_name: Option<String>,
345 pub manga_ori_name: Option<String>,
347 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
349 pub category: Option<i16>,
350 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
352 pub manga_status: Option<i16>,
353 pub link: Option<String>,
355 pub introduction: Option<String>,
357 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
359 pub author_id: Option<i32>,
360 pub author_name: Option<String>,
362 pub author_name2: Option<String>,
364 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
366 pub author_id2: Option<i32>,
367 pub magazine_name: Option<String>,
369 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
371 pub magazine_id: Option<i32>,
372 pub image: Option<String>,
374}
375
376#[derive(Debug, Clone, Deserialize, Default)]
378#[serde(rename_all = "camelCase")]
379pub struct AddStationRequest {
380 pub manga_id: i32,
382 pub member_id: i32,
384 pub post: i32,
386 pub fill_episodes: Option<bool>,
388}
389
390#[derive(Debug, Clone, Deserialize, Default)]
392#[serde(rename_all = "camelCase")]
393pub struct EpisodeDownloadRequest {
394 pub id: i32,
396 pub manga_id: i32,
398 pub member_id: i32,
400 pub my_name: String,
402}
403
404#[derive(Debug, Clone, Serialize, Deserialize)]
406#[serde(rename_all = "camelCase")]
407pub struct MangaEpisodeRss {
408 #[serde(rename = "Id")]
410 pub id: i32,
411 pub manga_id: i32,
413}
414
415#[derive(Debug, Clone, Deserialize, Default)]
423#[serde(rename_all = "camelCase")]
424pub struct MangaBenefitDto {
425 pub id: Option<i32>,
427 pub manga_id: i32,
429 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose")]
431 pub volume_number: Option<i32>,
432 pub volume_title: Option<String>,
434 pub store_name: Option<String>,
436 pub benefit_name: Option<String>,
438 pub benefit_tag: Option<String>,
440 pub img_url: Option<String>,
442 #[serde(default, deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose")]
444 pub r#type: Option<i16>,
445 pub publish_time: Option<chrono::DateTime<chrono::Utc>>,
447}
448
449#[derive(Debug, Clone, Serialize, Deserialize)]
451#[serde(rename_all = "camelCase")]
452pub struct VolumeVo {
453 pub id: i32,
455 pub volume_number: i32,
457 pub volume_title: Option<String>,
459 pub publish_time: Option<chrono::DateTime<chrono::Utc>>,
461 pub cover_url: Option<String>,
463 pub benefits: Vec<StoreBenefitVo>,
465}
466
467#[derive(Debug, Clone, Serialize, Deserialize)]
469#[serde(rename_all = "camelCase")]
470pub struct StoreBenefitVo {
471 pub store_name: Option<String>,
473 pub items: Vec<MangaBenefitItemVo>,
475}
476
477#[derive(Debug, Clone, Serialize, Deserialize)]
479#[serde(rename_all = "camelCase")]
480pub struct MangaBenefitItemVo {
481 pub id: i32,
483 pub benefit_name: Option<String>,
485 pub benefit_tag: Option<String>,
487 pub thumbnail_url: Option<String>,
489 pub image_url: Option<String>,
491}