main
use crate::errors::ApiError;
pub use crate::services::logout::*;
use api::http::State;
use api::middleware::RequestId;
use api::rest::{AppResponseData, NoData};
use session::Session;
#[utoipa::path(
post,
path = "/auth/logout",
tag = "auth",
operation_id = "auth_logout",
summary = "登出",
description = "销毁当前会话,并清掉该用户的 `/api/v1/auth/me` 缓存。匿名调用同样成功,此时 `user_id` 为 `null`。",
responses(
(status = 200, description = "会话已销毁", body = AppResponseData<LogoutResponse>, example = json!({"code":200,"message":"success","data":{"user_id":1024}})),
(status = 500, description = "服务端故障(`internal`、`database`、`cache`、`session`、`serialization`)", body = AppResponseData<NoData>, example = json!({"code": "internal", "message": "internal server error"}))
)
)]
pub async fn logout(
State(svc): State<crate::AuthService>,
session: Session,
request_id: RequestId,
) -> Result<AppResponseData<LogoutResponse>, ApiError> {
let response = svc.logout(session, request_id.0).await?;
Ok(AppResponseData::ok(response))
}