Skip to main content

yggdrasil/api/comments/
types.rs

1//! 评论 API 的请求与响应数据结构。
2
3use crate::models::comment::{AdminComment, PublicComment};
4use serde::{Deserialize, Serialize};
5
6/// 创建/审核/删除评论的统一响应结构。
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CommentResponse {
9    /// 操作是否成功。
10    pub success: bool,
11    /// 提示信息。
12    pub message: String,
13    /// 错误码,成功时为 None。
14    pub error_code: Option<String>,
15    /// 新评论 id。
16    #[serde(default)]
17    pub comment_id: Option<i64>,
18    /// 评论者头像 URL。
19    #[serde(default)]
20    pub avatar_url: Option<String>,
21    /// 评论嵌套深度。
22    #[serde(default)]
23    pub depth: Option<i32>,
24}
25
26/// 这些构造器只在 server function body 内调用,WASM 端因 cfg gate 剥离了调用点,
27/// 故对非 server 构建允许 dead_code。
28#[cfg_attr(not(feature = "server"), allow(dead_code))]
29impl CommentResponse {
30    /// 构造失败响应,携带错误码(comment_id / avatar_url / depth 均为 None)。
31    pub fn error(error_code: &str, message: impl Into<String>) -> Self {
32        Self {
33            success: false,
34            message: message.into(),
35            error_code: Some(error_code.into()),
36            comment_id: None,
37            avatar_url: None,
38            depth: None,
39        }
40    }
41
42    /// 构造成功响应(无关联数据,用于审核/删除等操作)。
43    pub fn ok(message: impl Into<String>) -> Self {
44        Self {
45            success: true,
46            message: message.into(),
47            error_code: None,
48            comment_id: None,
49            avatar_url: None,
50            depth: None,
51        }
52    }
53
54    /// 构造成功响应,携带新评论 id / 头像 / 深度(用于创建评论)。
55    pub fn created(
56        message: impl Into<String>,
57        comment_id: i64,
58        avatar_url: impl Into<String>,
59        depth: i32,
60    ) -> Self {
61        Self {
62            success: true,
63            message: message.into(),
64            error_code: None,
65            comment_id: Some(comment_id),
66            avatar_url: Some(avatar_url.into()),
67            depth: Some(depth),
68        }
69    }
70}
71
72/// 评论树响应:包含文章下的全部已审核评论。
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct CommentTreeResponse {
75    /// 评论列表。
76    pub comments: Vec<PublicComment>,
77    /// 评论总数。
78    pub count: i64,
79}
80
81/// 全部评论列表响应。
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct AllCommentsResponse {
84    /// 评论列表。
85    pub comments: Vec<AdminComment>,
86    /// 总数。
87    pub total: i64,
88}
89
90/// 待审核评论计数响应。
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct PendingCountResponse {
93    /// 待审核数量。
94    pub count: i64,
95}
96
97/// 批量更新状态响应。
98#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct BatchStatusResponse {
100    /// 操作是否成功。
101    pub success: bool,
102    /// 实际更新的行数。
103    pub updated_count: i64,
104    /// 提示信息。
105    pub message: String,
106}