bangumi_api/module/collection/
model.rs

1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::module::{
5    character::model::CharacterType,
6    episode::model::Episode,
7    model::{Image, SimpleImage, Tag},
8    person::model::{PersonCareer, PersonType},
9    subject::model::SubjectType,
10};
11
12/// 收藏状态统计信息
13///
14/// 包含不同收藏状态的数量统计,用于展示条目或内容的收藏分布情况
15#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct CollectionStats {
17    /// "想看"状态的数量
18    pub wish: Option<u32>,
19    /// "已收藏"状态的数量
20    pub collect: Option<u32>,
21    /// "在看"状态的数量
22    pub doing: Option<u32>,
23    /// "搁置"状态的数量
24    pub on_hold: Option<u32>,
25    /// "抛弃"状态的数量
26    pub dropped: Option<u32>,
27}
28
29/// 收藏类型枚举
30///
31/// 表示用户对条目(如动画、书籍等)的收藏状态分类,使用u8作为底层存储类型
32#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
33#[repr(u8)]
34pub enum CollectionType {
35    /// 想看(计划观看/阅读)
36    Wish = 1,
37    /// 已看(已完成)
38    Done = 2,
39    /// 在看(进行中)
40    Doing = 3,
41    /// 搁置(暂停中)
42    OnHold = 4,
43    /// 抛弃(已放弃)
44    Dropped = 5,
45}
46
47/// 单集收藏状态枚举
48///
49/// 表示用户对条目中单个剧集的收藏/观看状态,使用u8作为底层存储类型
50#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
51#[repr(u8)]
52pub enum CollectionEpisodeType {
53    /// 未处理(未标记状态)
54    Not = 0,
55    /// 想看(计划观看该集)
56    Wish = 1,
57    /// 已看(已完成观看该集)
58    Done = 2,
59    /// 抛弃(放弃观看该集)
60    Dropped = 3,
61}
62
63/// 更新条目收藏状态的请求参数
64///
65/// 用于向API提交更新用户对某个条目的收藏信息,包含状态、评分、进度等
66#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct CollectionSubjectUpdate {
68    /// 收藏类型(可选,更新为指定状态)
69    pub r#type: Option<CollectionType>,
70    /// 评分(可选,1-10分)
71    pub rate: Option<u32>,
72    /// 剧集进度(可选,已观看的集数)
73    pub ep_status: Option<u32>,
74    /// 卷进度(可选,已阅读的卷数)
75    pub vol_status: Option<u32>,
76    /// 评论(可选,用户对条目的评论)
77    pub comment: Option<String>,
78    /// 是否私密(可选,设置收藏信息是否私密)
79    pub private: Option<bool>,
80    /// 标签(可选,用户为条目添加的标签列表)
81    pub tags: Option<Vec<String>>,
82}
83
84/// 单集收藏详情
85///
86/// 包含单个剧集的信息及其对应的收藏状态和更新时间
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct CollectionEpisode {
89    /// 剧集基本信息
90    pub episode: Episode,
91    /// 该集的收藏状态
92    pub r#type: CollectionEpisodeType,
93    /// 状态更新时间(时间戳)
94    pub updated_at: u32,
95}
96
97/// 用户收藏的角色信息
98///
99/// 表示用户收藏的角色详情,包含角色ID、名称、类型等基本信息
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct CollectionCharacter {
102    /// 角色ID
103    pub id: u32,
104    /// 角色名称
105    pub name: String,
106    /// 角色类型
107    pub r#type: CharacterType,
108    /// 角色图片信息(可选)
109    pub images: Option<SimpleImage>,
110    /// 收藏时间(时间戳字符串)
111    pub created_at: String,
112}
113
114/// 用户收藏的人物信息
115///
116/// 表示用户收藏的人物详情,包含人物ID、名称、职业等基本信息
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct CollectionPerson {
119    /// 人物ID
120    pub id: u32,
121    /// 人物名称
122    pub name: String,
123    /// 人物类型
124    pub r#type: PersonType,
125    /// 人物职业(可选,如配音演员、导演等)
126    pub career: Option<Vec<PersonCareer>>,
127    /// 人物图片信息(可选)
128    pub images: Option<SimpleImage>,
129    /// 收藏时间(时间戳字符串)
130    pub created_at: String,
131}
132
133/// 用户对条目的收藏详情
134///
135/// 包含用户对某个条目的收藏状态、评分、进度等信息,以及关联的条目基本信息
136#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct CollectionSubject {
138    /// 条目ID
139    pub subject_id: u32,
140    /// 条目类型
141    pub subject_type: SubjectType,
142    /// 评分(1-10分)
143    pub rate: u32,
144    /// 收藏类型
145    pub r#type: CollectionType,
146    /// 评论内容(可选)
147    pub comment: Option<String>,
148    /// 标签列表
149    pub tags: Vec<String>,
150    /// 剧集进度(已观看集数)
151    pub ep_status: u32,
152    /// 卷进度(已阅读卷数)
153    pub vol_status: u32,
154    /// 最后更新时间(时间戳字符串)
155    pub updated_at: String,
156    /// 是否私密(true表示仅自己可见)
157    pub private: bool,
158    /// 关联的条目详情(可选)
159    pub subject: Option<UserSubject>,
160}
161
162/// 收藏条目的详细信息
163///
164/// 包含被收藏条目的基本信息,如名称、评分、标签等,用于展示收藏条目详情
165#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct UserSubject {
167    /// 条目ID
168    pub id: u32,
169    /// 条目类型
170    pub r#type: SubjectType,
171    /// 条目原名
172    pub name: String,
173    /// 条目中文名
174    pub name_cn: String,
175    /// 简短简介
176    pub short_summary: String,
177    /// 发布日期
178    pub date: String,
179    /// 图片信息
180    pub images: Image,
181    /// 总卷数
182    pub volumes: u32,
183    /// 总集数
184    pub eps: u32,
185    /// 总收藏数
186    pub collection_total: u32,
187    /// 综合评分
188    pub score: f64,
189    /// 排名
190    pub rank: u32,
191    /// 标签列表
192    pub tags: Vec<Tag>,
193}
194
195/// 批量更新单集收藏状态的请求参数
196///
197/// 用于一次性更新多个剧集的收藏状态
198#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct CollectionEpisodesUpdate {
200    /// 剧集ID列表(需更新状态的剧集)
201    pub episode_id: Vec<u32>,
202    /// 目标收藏状态(更新后的状态)
203    pub r#type: CollectionEpisodeType,
204}
205
206/// 单个更新单集收藏状态的请求参数
207///
208/// 用于更新单个剧集的收藏状态
209#[derive(Debug, Clone, Serialize, Deserialize)]
210pub struct CollectionEpisodeUpdate {
211    /// 目标收藏状态(更新后的状态)
212    pub r#type: CollectionEpisodeType,
213}