Skip to main content

yggdrasil/api/posts/
delete.rs

1//! 删除文章接口。
2//!
3//! 采用软删除方式,将 posts.deleted_at 设置为当前时间,
4//! 并按影响范围失效相关缓存。
5//! Leptos server function,注册在 `/api` 路径下。
6//! 仅在 `feature = "server"` 启用的服务端构建中执行删除与缓存失效。
7
8use crate::api::error::ApiError;
9use leptos::prelude::*;
10
11#[cfg(feature = "server")]
12use super::helpers::get_current_admin_user;
13use super::types::CreatePostResponse;
14#[cfg(feature = "server")]
15use super::{service, types::write_response};
16
17/// 删除指定文章。
18///
19/// 仅 admin 可调用;通过设置 deleted_at 实现软删除,
20/// 成功后按影响范围失效文章列表、标签云、统计、slug 及相关标签文章缓存。
21#[server(DeletePost, endpoint = "delete_post", input = leptos::server_fn::codec::Json)]
22pub async fn delete_post(post_id: i32) -> Result<CreatePostResponse, ApiError> {
23    let _user = get_current_admin_user().await?;
24    write_response(
25        service::act(post_id, None, service::PostAction::Trash).await,
26        "删除成功",
27    )
28}