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