bangumi_api/module/revision/
service.rs

1use anyhow::Result;
2use reqwest::Method;
3
4use crate::{common::model::BangumiClient, module::model::Paged};
5
6use super::model::{
7    RevisionCharacter, RevisionCommon, RevisionEpisode, RevisionPerson, RevisionSubject,
8};
9
10impl BangumiClient {
11    /// 获取指定人物的修订记录列表
12    ///
13    /// 查询某个人物的所有编辑修订历史,返回分页的通用修订信息
14    ///
15    /// # 参数
16    /// - `person_id`: 人物ID(必需,指定要查询的人物)
17    /// - `limit`: 可选,每页返回的修订记录数量
18    /// - `offset`: 可选,结果偏移量(用于分页,从0开始)
19    ///
20    /// # 返回
21    /// 返回包含通用修订信息的分页结果(`Paged<RevisionCommon>`)
22    pub async fn get_revision_persons(
23        &self,
24        person_id: u32,
25        limit: Option<u32>,
26        offset: Option<u32>,
27    ) -> Result<Paged<RevisionCommon>> {
28        // 构建人物修订记录列表接口URL
29        let url = format!("{}/v0/revisions/persons", self.base_path);
30
31        // 创建GET请求构建器
32        let mut request_builder = self.request_builder(Method::GET, &url);
33
34        // 添加必需的人物ID查询参数
35        request_builder = request_builder.query(&[("person_id", &person_id)]);
36        // 添加分页参数
37        if let Some(ref param_value) = limit {
38            request_builder = request_builder.query(&[("limit", &param_value)]);
39        }
40        if let Some(ref param_value) = offset {
41            request_builder = request_builder.query(&[("offset", &param_value)]);
42        }
43
44        // 发送请求并解析分页的通用修订信息
45        let res = self.request_send(request_builder).await?.json().await?;
46
47        Ok(res)
48    }
49
50    /// 获取单条人物修订记录的详细信息
51    ///
52    /// 根据修订记录ID查询某个人物修订的完整数据,包含具体的字段变更内容
53    ///
54    /// # 参数
55    /// - `revision_id`: 修订记录ID(必需,指定要查询的具体修订)
56    ///
57    /// # 返回
58    /// 返回包含人物修订详情的`RevisionPerson`结构体
59    pub async fn get_revision_person(&self, revision_id: u32) -> Result<RevisionPerson> {
60        // 构建单条人物修订详情接口URL
61        let url = format!("{}/v0/revisions/persons/{revision_id}", self.base_path);
62
63        // 创建GET请求构建器
64        let request_builder = self.request_builder(Method::GET, &url);
65
66        // 发送请求并解析人物修订详情
67        let res = self.request_send(request_builder).await?.json().await?;
68
69        Ok(res)
70    }
71
72    /// 获取指定角色的修订记录列表
73    ///
74    /// 查询某个角色的所有编辑修订历史,返回分页的通用修订信息
75    ///
76    /// # 参数
77    /// - `character_id`: 角色ID(必需,指定要查询的角色)
78    /// - `limit`: 可选,每页返回的修订记录数量
79    /// - `offset`: 可选,结果偏移量(用于分页,从0开始)
80    ///
81    /// # 返回
82    /// 返回包含通用修订信息的分页结果(`Paged<RevisionCommon>`)
83    pub async fn get_revision_characters(
84        &self,
85        character_id: u32,
86        limit: Option<u32>,
87        offset: Option<u32>,
88    ) -> Result<Paged<RevisionCommon>> {
89        // 构建角色修订记录列表接口URL
90        let url = format!("{}/v0/revisions/characters", self.base_path);
91
92        // 创建GET请求构建器
93        let mut request_builder = self.request_builder(Method::GET, &url);
94
95        // 添加必需的角色ID查询参数
96        request_builder = request_builder.query(&[("character_id", &character_id)]);
97        // 添加分页参数
98        if let Some(ref param_value) = limit {
99            request_builder = request_builder.query(&[("limit", &param_value)]);
100        }
101        if let Some(ref param_value) = offset {
102            request_builder = request_builder.query(&[("offset", &param_value)]);
103        }
104
105        // 发送请求并解析分页的通用修订信息
106        let res = self.request_send(request_builder).await?.json().await?;
107
108        Ok(res)
109    }
110
111    /// 获取单条角色修订记录的详细信息
112    ///
113    /// 根据修订记录ID查询某个角色修订的完整数据,包含具体的字段变更内容
114    ///
115    /// # 参数
116    /// - `revision_id`: 修订记录ID(必需,指定要查询的具体修订)
117    ///
118    /// # 返回
119    /// 返回包含角色修订详情的`RevisionCharacter`结构体
120    pub async fn get_revision_character(&self, revision_id: u32) -> Result<RevisionCharacter> {
121        // 构建单条角色修订详情接口URL
122        let url = format!("{}/v0/revisions/characters/{revision_id}", self.base_path);
123
124        // 创建GET请求构建器
125        let request_builder = self.request_builder(Method::GET, &url);
126
127        // 发送请求并解析角色修订详情
128        let res = self.request_send(request_builder).await?.json().await?;
129
130        Ok(res)
131    }
132
133    /// 获取指定条目的修订记录列表
134    ///
135    /// 查询某个条目(作品)的所有编辑修订历史,返回分页的通用修订信息
136    ///
137    /// # 参数
138    /// - `subject_id`: 条目ID(必需,指定要查询的作品)
139    /// - `limit`: 可选,每页返回的修订记录数量
140    /// - `offset`: 可选,结果偏移量(用于分页,从0开始)
141    ///
142    /// # 返回
143    /// 返回包含通用修订信息的分页结果(`Paged<RevisionCommon>`)
144    pub async fn get_revision_subjects(
145        &self,
146        subject_id: u32,
147        limit: Option<u32>,
148        offset: Option<u32>,
149    ) -> Result<Paged<RevisionCommon>> {
150        // 构建条目修订记录列表接口URL
151        let url = format!("{}/v0/revisions/subjects", self.base_path);
152
153        // 创建GET请求构建器
154        let mut request_builder = self.request_builder(Method::GET, &url);
155
156        // 添加必需的条目ID查询参数
157        request_builder = request_builder.query(&[("subject_id", &subject_id)]);
158        // 添加分页参数
159        if let Some(ref param_value) = limit {
160            request_builder = request_builder.query(&[("limit", &param_value)]);
161        }
162        if let Some(ref param_value) = offset {
163            request_builder = request_builder.query(&[("offset", &param_value)]);
164        }
165        // 发送请求并解析分页的通用修订信息
166        let res = self.request_send(request_builder).await?.json().await?;
167
168        Ok(res)
169    }
170
171    /// 获取单条条目修订记录的详细信息
172    ///
173    /// 根据修订记录ID查询某个条目修订的完整数据,包含具体的字段变更内容
174    ///
175    /// # 参数
176    /// - `revision_id`: 修订记录ID(必需,指定要查询的具体修订)
177    ///
178    /// # 返回
179    /// 返回包含条目修订详情的`RevisionSubject`结构体
180    pub async fn get_revision_subject(&self, revision_id: u32) -> Result<RevisionSubject> {
181        // 构建单条条目修订详情接口URL
182        let url = format!("{}/v0/revisions/subjects/{revision_id}", self.base_path);
183
184        // 创建GET请求构建器
185        let request_builder = self.request_builder(Method::GET, &url);
186
187        // 发送请求并解析条目修订详情
188        let res = self.request_send(request_builder).await?.json().await?;
189
190        Ok(res)
191    }
192
193    /// 获取指定剧集的修订记录列表
194    ///
195    /// 查询某个剧集的所有编辑修订历史,返回分页的通用修订信息
196    ///
197    /// # 参数
198    /// - `episode_id`: 剧集ID(必需,指定要查询的剧集)
199    /// - `limit`: 可选,每页返回的修订记录数量
200    /// - `offset`: 可选,结果偏移量(用于分页,从0开始)
201    ///
202    /// # 返回
203    /// 返回包含通用修订信息的分页结果(`Paged<RevisionCommon>`)
204    pub async fn get_revision_episodes(
205        &self,
206        episode_id: u32,
207        limit: Option<u32>,
208        offset: Option<u32>,
209    ) -> Result<Paged<RevisionCommon>> {
210        // 构建剧集修订记录列表接口URL
211        let url = format!("{}/v0/revisions/episodes", self.base_path);
212
213        // 创建GET请求构建器
214        let mut request_builder = self.request_builder(Method::GET, &url);
215
216        // 添加必需的剧集ID查询参数
217        request_builder = request_builder.query(&[("episode_id", &episode_id)]);
218        // 添加分页参数
219        if let Some(ref param_value) = limit {
220            request_builder = request_builder.query(&[("limit", &param_value)]);
221        }
222        if let Some(ref param_value) = offset {
223            request_builder = request_builder.query(&[("offset", &param_value)]);
224        }
225        // 发送请求并解析分页的通用修订信息
226        let res = self.request_send(request_builder).await?.json().await?;
227
228        Ok(res)
229    }
230
231    /// 获取单条剧集修订记录的详细信息
232    ///
233    /// 根据修订记录ID查询某个剧集修订的完整数据,包含具体的字段变更内容
234    ///
235    /// # 参数
236    /// - `revision_id`: 修订记录ID(必需,指定要查询的具体修订)
237    ///
238    /// # 返回
239    /// 返回包含剧集修订详情的`RevisionEpisode`结构体
240    pub async fn get_revision_episode(&self, revision_id: u32) -> Result<RevisionEpisode> {
241        // 构建单条剧集修订详情接口URL
242        let url = format!("{}/v0/revisions/episodes/{revision_id}", self.base_path);
243
244        // 创建GET请求构建器
245        let request_builder = self.request_builder(Method::GET, &url);
246
247        // 发送请求并解析剧集修订详情
248        let res = self.request_send(request_builder).await?.json().await?;
249
250        Ok(res)
251    }
252}