bangumi_api/module/indice/
service.rs1use anyhow::Result;
2use reqwest::Method;
3
4use crate::{
5 common::model::BangumiClient,
6 module::{model::Paged, subject::model::SubjectType},
7};
8
9use super::model::{
10 Index, IndexBasicInfo, IndexSubject, IndexSubjectAddInfo, IndexSubjectEditInfo,
11};
12
13impl BangumiClient {
14 pub async fn add_index(&self) -> Result<Index> {
21 let url = format!("{}/v0/indices", self.base_path);
23
24 let request_builder = self.request_builder(Method::POST, &url);
26
27 let res = self.request_send(request_builder).await?.json().await?;
29
30 Ok(res)
31 }
32
33 pub async fn get_index(&self, index_id: u32) -> Result<Index> {
43 let url = format!("{}/v0/indices/{index_id}", self.base_path);
45
46 let request_builder = self.request_builder(Method::GET, &url);
48
49 let res = self.request_send(request_builder).await?.json().await?;
51
52 Ok(res)
53 }
54
55 pub async fn edit_index(
66 &self,
67 index_id: u32,
68 payload: Option<IndexBasicInfo>,
69 ) -> Result<Index> {
70 let url = format!("{}/v0/indices/{index_id}", self.base_path);
72
73 let mut request_builder = self.request_builder(Method::PUT, &url);
75 request_builder = request_builder.json(&payload);
76
77 let res = self.request_send(request_builder).await?.json().await?;
79
80 Ok(res)
81 }
82
83 pub async fn get_index_subjects(
96 &self,
97 index_id: u32,
98 r#type: Option<SubjectType>,
99 limit: Option<u32>,
100 offset: Option<u32>,
101 ) -> Result<Paged<IndexSubject>> {
102 let url = format!("{}/v0/indices/{index_id}/subjects", self.base_path);
104
105 let mut request_builder = self.request_builder(Method::GET, &url);
107
108 if let Some(ref param_value) = r#type {
110 request_builder = request_builder.query(&[("type", ¶m_value)]);
111 }
112 if let Some(ref param_value) = limit {
114 request_builder = request_builder.query(&[("limit", ¶m_value)]);
115 }
116 if let Some(ref param_value) = offset {
117 request_builder = request_builder.query(&[("offset", ¶m_value)]);
118 }
119
120 let res = self.request_send(request_builder).await?.json().await?;
122
123 Ok(res)
124 }
125
126 pub async fn add_index_subject(
137 &self,
138 index_id: u32,
139 payload: Option<IndexSubjectAddInfo>,
140 ) -> Result<()> {
141 let url = format!("{}/v0/indices/{index_id}/subjects", self.base_path);
143
144 let mut request_builder = self.request_builder(Method::POST, &url);
146 request_builder = request_builder.json(&payload);
147
148 let _res = self.request_send(request_builder).await?;
150
151 Ok(())
152 }
153
154 pub async fn edit_index_subject(
166 &self,
167 index_id: u32,
168 subject_id: u32,
169 payload: Option<IndexSubjectEditInfo>,
170 ) -> Result<()> {
171 let url = format!(
173 "{}/v0/indices/{index_id}/subjects/{subject_id}",
174 self.base_path
175 );
176
177 let mut request_builder = self.request_builder(Method::PUT, &url);
179 request_builder = request_builder.json(&payload);
180
181 let res = self.request_send(request_builder).await?.json().await?;
183
184 Ok(res)
185 }
186
187 pub async fn delete_index_subject(&self, index_id: u32, subject_id: u32) -> Result<()> {
198 let url = format!(
200 "{}/v0/indices/{index_id}/subjects/{subject_id}",
201 self.base_path
202 );
203
204 let request_builder = self.request_builder(Method::DELETE, &url);
206
207 let res = self.request_send(request_builder).await?.json().await?;
209
210 Ok(res)
211 }
212
213 pub async fn collect_index(&self, index_id: u32) -> Result<()> {
223 let url = format!("{}/v0/indices/{index_id}/collect", self.base_path);
225
226 let request_builder = self.request_builder(Method::POST, &url);
228
229 let _res = self.request_send(request_builder).await?;
231
232 Ok(())
233 }
234
235 pub async fn uncollect_index(&self, index_id: u32) -> Result<()> {
245 let url = format!("{}/v0/indices/{index_id}/collect", self.base_path);
247
248 let request_builder = self.request_builder(Method::DELETE, &url);
250
251 let _res = self.request_send(request_builder).await?;
253
254 Ok(())
255 }
256}