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 #[serde(skip_serializing_if = "Option::is_none")]
66 pub setup_time: Option<DateTime<Utc>>,
67 pub update_time: Option<DateTime<Utc>>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub author_name: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub author_name2: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub author_id2: Option<i32>,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub magazine_name: Option<String>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub translator_setup_time: Option<DateTime<Utc>>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub translator_update_time: Option<DateTime<Utc>>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub proofreader_setup_time: Option<DateTime<Utc>>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub proofreader_update_time: Option<DateTime<Utc>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub letterer_setup_time: Option<DateTime<Utc>>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub letterer_update_time: Option<DateTime<Utc>>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub reviewer_setup_time: Option<DateTime<Utc>>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub reviewer_update_time: Option<DateTime<Utc>>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub timer_setup_time: Option<DateTime<Utc>>,
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub timer_update_time: Option<DateTime<Utc>>,
111}
112
113pub type MangaListVo = MangaCardVo;
115
116#[derive(Debug, Clone, Serialize, Deserialize, Default)]
118#[serde(rename_all = "camelCase")]
119pub struct MangaSimpleVo {
120 pub id: i32,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub manga_tran_name: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub manga_ori_name: Option<String>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize, Default)]
132#[serde(rename_all = "camelCase")]
133pub struct MangaDetailVo {
134 pub id: i32,
136 pub manga_tran_name: Option<String>,
138 pub manga_ori_name: Option<String>,
140 pub image: Option<String>,
142 pub category: Option<i16>,
144 pub manga_status: Option<i16>,
146 pub setup_time: Option<DateTime<Utc>>,
148 pub update_time: Option<DateTime<Utc>>,
150 pub link: Option<String>,
152 pub introduction: Option<String>,
154 pub author_name: Option<String>,
156 pub author_id: Option<i32>,
158 pub author_name2: Option<String>,
160 pub author_id2: Option<i32>,
162 pub magazine_name: Option<String>,
164 pub magazine_id: Option<i32>,
166}
167
168#[derive(Debug, Clone, Serialize, Deserialize, Default)]
170#[serde(rename_all = "camelCase")]
171pub struct MangaResponse {
172 pub id: Option<i32>,
174 pub manga_tran_name: Option<String>,
176 pub manga_ori_name: Option<String>,
178 pub image: Option<String>,
180 pub category: Option<i16>,
182 pub manga_status: Option<i16>,
184 pub setup_time: Option<DateTime<Utc>>,
186 pub update_time: Option<DateTime<Utc>>,
188 pub link: Option<String>,
190 pub introduction: Option<String>,
192 pub author_name: Option<String>,
194 pub author_id: Option<i32>,
196 pub author_name2: Option<String>,
198 pub author_id2: Option<i32>,
200 pub magazine_name: Option<String>,
202 pub magazine_id: Option<i32>,
204 pub translator_setup_time: Option<DateTime<Utc>>,
206 pub translator_update_time: Option<DateTime<Utc>>,
208 pub proofreader_setup_time: Option<DateTime<Utc>>,
210 pub proofreader_update_time: Option<DateTime<Utc>>,
212 pub letterer_setup_time: Option<DateTime<Utc>>,
214 pub letterer_update_time: Option<DateTime<Utc>>,
216 pub reviewer_setup_time: Option<DateTime<Utc>>,
218 pub reviewer_update_time: Option<DateTime<Utc>>,
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize, Default)]
224#[serde(rename_all = "camelCase")]
225pub struct Manga {
226 #[serde(rename = "Id")]
228 pub id: Option<i32>,
229 pub manga_tran_name: Option<String>,
231 pub manga_ori_name: Option<String>,
233 pub category: Option<i16>,
235 pub manga_status: Option<i16>,
237 pub img_url: Option<String>,
239 pub link: Option<String>,
241 pub introduction: Option<String>,
243 pub update_time: Option<DateTime<Utc>>,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
249#[serde(rename_all = "camelCase")]
250pub struct MangaCollect {
251 pub id: Option<i32>,
253 pub manga_id: i32,
255 pub member_id: i32,
257}
258
259#[derive(Debug, Clone, Serialize, Deserialize, Default)]
261#[serde(rename_all = "camelCase")]
262pub struct CollectedMembersVo {
263 pub id: i32,
265 pub username: Option<String>,
267 pub intern: i16,
269 pub posts: Vec<crate::entity::member::Post>,
271 pub station_count: Option<i32>,
273 pub registration_time: Option<DateTime<Utc>>,
275 pub last_submit_time: Option<DateTime<Utc>>,
277}
278
279#[derive(Debug, Clone, Serialize, Deserialize, Default)]
284#[serde(rename_all = "camelCase")]
285pub struct GlossaryVo {
286 pub id: i32,
288 pub title: Option<String>,
290 pub content: Option<String>,
292 pub image: Option<String>,
294 pub r#type: Option<i16>,
296 #[serde(
298 default,
299 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
300 )]
301 pub manga_id: Option<i16>,
302 pub first: Option<String>,
304 pub update_time: Option<DateTime<Utc>>,
306 pub update_by: Option<i32>,
308 pub update_member_name: Option<String>,
310}
311
312#[derive(Debug, Clone, Deserialize, Default)]
314#[serde(rename_all = "camelCase")]
315pub struct GlossaryRequest {
316 #[serde(
318 default,
319 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
320 )]
321 pub id: Option<i32>,
322 pub title: Option<String>,
324 pub content: Option<String>,
326 pub image: Option<String>,
328 #[serde(
330 default,
331 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
332 )]
333 pub r#type: Option<i16>,
334 #[serde(
336 default,
337 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
338 )]
339 pub manga_id: Option<i16>,
340 pub first: Option<String>,
342 pub update_time: Option<DateTime<Utc>>,
344 #[serde(
346 default,
347 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
348 )]
349 pub update_by: Option<i32>,
350 pub update_member_name: Option<String>,
352}
353
354#[derive(Debug, Clone, Deserialize, Default)]
356#[serde(rename_all = "camelCase")]
357pub struct MangaUpdateRequest {
358 #[serde(
360 default,
361 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
362 )]
363 pub id: Option<i32>,
364 pub manga_tran_name: Option<String>,
366 pub manga_ori_name: Option<String>,
368 #[serde(
370 default,
371 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
372 )]
373 pub category: Option<i16>,
374 #[serde(
376 default,
377 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
378 )]
379 pub manga_status: Option<i16>,
380 pub link: Option<String>,
382 pub introduction: Option<String>,
384 #[serde(
386 default,
387 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
388 )]
389 pub author_id: Option<i32>,
390 pub author_name: Option<String>,
392 pub author_name2: Option<String>,
394 #[serde(
396 default,
397 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
398 )]
399 pub author_id2: Option<i32>,
400 pub magazine_name: Option<String>,
402 #[serde(
404 default,
405 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
406 )]
407 pub magazine_id: Option<i32>,
408 pub image: Option<String>,
410}
411
412#[derive(Debug, Clone, Deserialize, Default)]
414#[serde(rename_all = "camelCase")]
415pub struct AddStationRequest {
416 pub manga_id: i32,
418 pub member_id: i32,
420 pub post: i32,
422 pub fill_episodes: Option<bool>,
424}
425
426#[derive(Debug, Clone, Deserialize, Default)]
428#[serde(rename_all = "camelCase")]
429pub struct EpisodeDownloadRequest {
430 pub id: i32,
432 pub manga_id: i32,
434 pub member_id: i32,
436 pub my_name: String,
438}
439
440#[derive(Debug, Clone, Serialize, Deserialize)]
442#[serde(rename_all = "camelCase")]
443pub struct MangaEpisodeRss {
444 #[serde(rename = "Id")]
446 pub id: i32,
447 pub manga_id: i32,
449}
450
451#[derive(Debug, Clone, Deserialize, Default)]
459#[serde(rename_all = "camelCase")]
460pub struct MangaBenefitDto {
461 pub id: Option<i32>,
463 pub manga_id: i32,
465 #[serde(
467 default,
468 deserialize_with = "crate::utils::query_deserialize::de_opt_i32_loose"
469 )]
470 pub volume_number: Option<i32>,
471 pub volume_title: Option<String>,
473 pub store_name: Option<String>,
475 pub benefit_name: Option<String>,
477 pub benefit_tag: Option<String>,
479 pub img_url: Option<String>,
481 #[serde(
483 default,
484 deserialize_with = "crate::utils::query_deserialize::de_opt_i16_loose"
485 )]
486 pub r#type: Option<i16>,
487 pub publish_time: Option<chrono::DateTime<chrono::Utc>>,
489}
490
491#[derive(Debug, Clone, Serialize, Deserialize)]
493#[serde(rename_all = "camelCase")]
494pub struct VolumeVo {
495 pub id: i32,
497 pub volume_number: i32,
499 pub volume_title: Option<String>,
501 pub publish_time: Option<chrono::DateTime<chrono::Utc>>,
503 pub cover_url: Option<String>,
505 pub benefits: Vec<StoreBenefitVo>,
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize)]
511#[serde(rename_all = "camelCase")]
512pub struct StoreBenefitVo {
513 pub store_name: Option<String>,
515 pub items: Vec<MangaBenefitItemVo>,
517}
518
519#[derive(Debug, Clone, Serialize, Deserialize)]
521#[serde(rename_all = "camelCase")]
522pub struct MangaBenefitItemVo {
523 pub id: i32,
525 pub benefit_name: Option<String>,
527 pub benefit_tag: Option<String>,
529 pub thumbnail_url: Option<String>,
531 pub image_url: Option<String>,
533}