open_lark/service/cloud_docs/drive/v1/
like.rs

1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    core::{
6        api_req::ApiRequest,
7        api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8        config::Config,
9        constants::AccessTokenType,
10        http::Transport,
11        req_option::RequestOption,
12        SDKResult,
13    },
14    impl_executable_builder_owned,
15};
16
17/// 点赞服务
18pub struct LikeService {
19    config: Config,
20}
21
22impl LikeService {
23    pub fn new(config: Config) -> Self {
24        Self { config }
25    }
26
27    /// 获取云文档的点赞者列表
28    ///
29    /// 该接口用于获取云文档的点赞者列表。
30    ///
31    /// <https://open.feishu.cn/document/server-docs/docs/drive-v1/file-like_record/list>
32    pub async fn list_file_likes(
33        &self,
34        request: ListFileLikesRequest,
35        option: Option<RequestOption>,
36    ) -> SDKResult<BaseResponse<ListFileLikesRespData>> {
37        let mut api_req = ApiRequest {
38            http_method: Method::GET,
39            api_path: format!(
40                "/open-apis/drive/v1/files/{}/like_records",
41                request.file_token
42            ),
43            supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
44            ..Default::default()
45        };
46
47        // 添加查询参数
48        if let Some(page_token) = request.page_token {
49            api_req
50                .query_params
51                .insert("page_token".to_string(), page_token);
52        }
53        if let Some(page_size) = request.page_size {
54            api_req
55                .query_params
56                .insert("page_size".to_string(), page_size.to_string());
57        }
58
59        let api_resp = Transport::request(api_req, &self.config, option).await?;
60        Ok(api_resp)
61    }
62}
63
64/// 获取云文档的点赞者列表请求参数
65#[derive(Debug, Clone, Serialize, Deserialize, Default)]
66pub struct ListFileLikesRequest {
67    /// 文件token
68    pub file_token: String,
69    /// 分页token
70    pub page_token: Option<String>,
71    /// 分页大小
72    pub page_size: Option<i32>,
73}
74
75impl ListFileLikesRequest {
76    pub fn builder() -> ListFileLikesRequestBuilder {
77        ListFileLikesRequestBuilder::default()
78    }
79
80    pub fn new(file_token: impl Into<String>) -> Self {
81        Self {
82            file_token: file_token.into(),
83            page_token: None,
84            page_size: None,
85        }
86    }
87
88    pub fn with_page_token(mut self, page_token: impl Into<String>) -> Self {
89        self.page_token = Some(page_token.into());
90        self
91    }
92
93    pub fn with_page_size(mut self, page_size: i32) -> Self {
94        self.page_size = Some(page_size);
95        self
96    }
97}
98
99/// 获取云文档的点赞者列表请求构建器
100#[derive(Default)]
101pub struct ListFileLikesRequestBuilder {
102    request: ListFileLikesRequest,
103}
104
105impl ListFileLikesRequestBuilder {
106    pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
107        self.request.file_token = file_token.into();
108        self
109    }
110
111    pub fn page_token(mut self, page_token: impl Into<String>) -> Self {
112        self.request.page_token = Some(page_token.into());
113        self
114    }
115
116    pub fn page_size(mut self, page_size: i32) -> Self {
117        self.request.page_size = Some(page_size);
118        self
119    }
120
121    pub fn build(self) -> ListFileLikesRequest {
122        self.request
123    }
124}
125
126impl_executable_builder_owned!(
127    ListFileLikesRequestBuilder,
128    LikeService,
129    ListFileLikesRequest,
130    BaseResponse<ListFileLikesRespData>,
131    list_file_likes
132);
133
134/// 获取云文档的点赞者列表响应数据
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct ListFileLikesRespData {
137    /// 是否还有更多数据
138    pub has_more: bool,
139    /// 下一页token
140    pub page_token: Option<String>,
141    /// 点赞记录列表
142    pub items: Vec<FileLikeRecord>,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize)]
146pub struct FileLikeRecord {
147    /// 点赞者ID
148    pub user_id: String,
149    /// 点赞者姓名
150    pub user_name: String,
151    /// 点赞时间(时间戳,单位:秒)
152    pub like_time: String,
153    /// 点赞者头像
154    pub avatar_url: Option<String>,
155}
156
157impl ApiResponseTrait for ListFileLikesRespData {
158    fn data_format() -> ResponseFormat {
159        ResponseFormat::Data
160    }
161}