bangumi_api/module/revision/
model.rs

1use serde::{Deserialize, Serialize};
2
3/// 所有修订记录的通用基础结构
4///
5/// 包含各类修订记录共有的核心字段,用于描述一次修订的基本信息
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct RevisionCommon {
8    /// 修订记录的唯一标识符
9    pub id: u32,
10    /// 修订类型标识(用于区分不同实体的修订,如人物、角色、条目等)
11    pub r#type: u32,
12    /// 修订创建者信息(可选,可能为None表示匿名或信息未记录)
13    pub creator: Option<Creator>,
14    /// 修订摘要(简要描述本次修订的内容或目的)
15    pub summary: String,
16    /// 修订创建时间(格式通常为ISO 8601时间字符串)
17    pub created_at: String,
18}
19
20/// 修订创建者信息结构体
21///
22/// 记录发起修订操作的用户基本信息
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct Creator {
25    /// 创建者的用户名(登录账号)
26    pub username: String,
27    /// 创建者的昵称(显示名称)
28    pub nickname: String,
29}
30
31/// 人物相关修订记录的结构体
32///
33/// 继承通用修订字段,并包含人物特有的修订数据
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct RevisionPerson {
36    /// 修订记录ID
37    pub id: u32,
38    /// 修订类型标识(人物修订的类型编码)
39    pub r#type: u32,
40    /// 修订创建者信息(可选)
41    pub creator: Option<Creator>,
42    /// 修订摘要
43    pub summary: String,
44    /// 修订创建时间
45    pub created_at: String,
46    /// 修订的具体数据(可选,键通常为修订版本对比标识,值为对应版本的人物数据)
47    pub data: Option<std::collections::HashMap<String, RevisionPersonDataItem>>,
48}
49
50/// 人物修订的具体数据项
51///
52/// 包含人物修订中涉及的详细字段变更信息
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct RevisionPersonDataItem {
55    /// 人物信息框内容(结构化的人物属性描述)
56    pub prsn_infobox: String,
57    /// 人物简介内容
58    pub prsn_summary: String,
59    /// 人物职业信息(记录职业相关的修订)
60    pub profession: PersonRevisionProfession,
61    /// 额外信息(如图片等)
62    pub extra: RevisionExtra,
63    /// 人物名称
64    pub prsn_name: String,
65}
66
67/// 人物修订中的职业变更信息
68///
69/// 记录各类职业是否有修订(值可能为修订说明或空字符串)
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct PersonRevisionProfession {
72    /// 制作人职业的修订信息(可选)
73    pub producer: Option<String>,
74    /// 漫画家职业的修订信息(可选)
75    pub mangaka: Option<String>,
76    /// 艺术家职业的修订信息(可选)
77    pub artist: Option<String>,
78    /// 声优职业的修订信息(可选)
79    pub seiyu: Option<String>,
80    /// 编剧职业的修订信息(可选)
81    pub writer: Option<String>,
82    /// 插画师职业的修订信息(可选)
83    pub illustrator: Option<String>,
84    /// 演员职业的修订信息(可选)
85    pub actor: Option<String>,
86}
87
88/// 修订中的额外信息结构体
89///
90/// 用于存储各类修订中可能涉及的附加数据
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct RevisionExtra {
93    /// 图片相关的修订信息(可选,可能为图片URL或修改说明)
94    pub img: Option<String>,
95}
96
97/// 角色相关修订记录的结构体
98///
99/// 继承通用修订字段,并包含角色特有的修订数据
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct RevisionCharacter {
102    /// 修订记录ID
103    pub id: u32,
104    /// 修订类型标识(角色修订的类型编码)
105    pub r#type: u32,
106    /// 修订创建者信息(可选)
107    pub creator: Option<Creator>,
108    /// 修订摘要
109    pub summary: String,
110    /// 修订创建时间
111    pub created_at: String,
112    /// 修订的具体数据(可选,键通常为修订版本对比标识,值为对应版本的角色数据)
113    pub data: Option<std::collections::HashMap<String, RevisionCharacterDataItem>>,
114}
115
116/// 角色修订的具体数据项
117///
118/// 包含角色修订中涉及的详细字段变更信息
119#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct RevisionCharacterDataItem {
121    /// 角色信息框内容
122    pub infobox: String,
123    /// 角色简介内容
124    pub summary: String,
125    /// 角色名称
126    pub name: String,
127    /// 额外信息(如图片等)
128    pub extra: RevisionExtra,
129}
130
131/// 条目(作品)相关修订记录的结构体
132///
133/// 继承通用修订字段,并包含条目特有的修订数据
134#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct RevisionSubject {
136    /// 修订记录ID
137    pub id: u32,
138    /// 修订类型标识(条目修订的类型编码)
139    pub r#type: u32,
140    /// 修订创建者信息(可选)
141    pub creator: Option<Creator>,
142    /// 修订摘要
143    pub summary: String,
144    /// 修订创建时间
145    pub created_at: String,
146    /// 修订的具体数据(可选,包含条目的详细修订内容)
147    pub data: Option<RevisionSubjectData>,
148}
149
150/// 条目修订的具体数据
151///
152/// 包含条目修订中涉及的详细字段变更信息
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct RevisionSubjectData {
155    /// 集数相关字段的修订值
156    pub field_eps: u32,
157    /// 条目信息框内容
158    pub field_infobox: String,
159    /// 条目简介内容
160    pub field_summary: String,
161    /// 条目原名
162    pub name: String,
163    /// 条目中文名
164    pub name_cn: String,
165    /// 平台标识(如游戏平台、播放平台等)
166    pub platform: u32,
167    /// 条目ID(修订对应的条目唯一标识)
168    pub subject_id: u32,
169    /// 条目类型标识
170    pub r#type: u32,
171    /// 类型ID(更细分的条目类型)
172    pub type_id: u32,
173    /// 投票相关字段内容
174    pub vote_field: String,
175}
176
177/// 剧集相关修订记录的结构体
178///
179/// 继承通用修订字段,并包含剧集特有的修订数据(数据结构更灵活)
180#[derive(Debug, Clone, Serialize, Deserialize)]
181pub struct RevisionEpisode {
182    /// 修订记录ID
183    pub id: u32,
184    /// 修订类型标识(剧集修订的类型编码)
185    pub r#type: u32,
186    /// 修订创建者信息(可选)
187    pub creator: Option<Creator>,
188    /// 修订摘要
189    pub summary: String,
190    /// 修订创建时间
191    pub created_at: String,
192    /// 修订的具体数据(可选,使用JSON值存储灵活的结构)
193    pub data: Option<serde_json::Value>,
194}