Skip to main content

ncm_api_rs/api/
comment_new.rs

1use super::Query;
2use crate::error::Result;
3/// 新版评论
4/// 对应 Node.js module/comment_new.js
5use crate::request::{ApiClient, ApiResponse, CryptoType};
6use serde_json::json;
7
8impl ApiClient {
9    /// 新版评论
10    /// 对应 /comment/new
11    pub async fn comment_new(&self, query: &Query) -> Result<ApiResponse> {
12        let resource_type = query.get_or("type", "0");
13        let id = query.get_or("id", "0");
14        let sort_type = query.get_or("sortType", "99").parse::<i64>().unwrap_or(99);
15        let page_no = query.get_or("pageNo", "1").parse::<i64>().unwrap_or(1);
16        let page_size = query.get_or("pageSize", "20").parse::<i64>().unwrap_or(20);
17
18        // 确定正确的 sortType(1 -> 99)
19        let sort_type = if sort_type == 1 { 99 } else { sort_type };
20
21        // 计算 cursor
22        let cursor = match sort_type {
23            99 => format!("{}", (page_no - 1) * page_size),
24            2 => format!("normalHot#{}", (page_no - 1) * page_size),
25            _ => query.get_or("cursor", "0"),
26        };
27
28        let thread_id = crate::util::config::RESOURCE_TYPE_MAP
29            .get(resource_type.as_str())
30            .map(|prefix| format!("{}{}", prefix, id))
31            .unwrap_or_default();
32
33        let data = json!({
34            "rid": id,
35            "threadId": thread_id,
36            "pageNo": page_no,
37            "showInner": query.get_or("showInner", "true"),
38            "pageSize": page_size,
39            "cursor": cursor,
40            "sortType": sort_type
41        });
42        self.request(
43            "/api/v2/resource/comments",
44            data,
45            query.to_option(CryptoType::default()),
46        )
47        .await
48    }
49}