main
use crate::errors::ApiError;
use crate::services::me::MeResponse;
use api::http::State;
use api::middleware::RequestId;
use api::rest::{AppResponseData, NoData};
use session::Session;
#[utoipa::path(
get,
path = "/auth/me",
tag = "auth",
operation_id = "auth_me",
summary = "当前登录用户",
description = "通过会话 Cookie 返回用户自述信息。结果在服务端缓存 300 秒,每第 5 次访问回源刷新;登出与改密会主动失效该缓存。",
responses(
(status = 200, description = "当前登录用户", body = AppResponseData<MeResponse>, example = json!({"code":200,"message":"success","data":{"user_id":1024,"username":"ada","displayname":"Ada","email":"ada@example.com","is_admin":false,"avatar_url":"https://cdn.example.com/avatar/ada.png","email_verified_at":"2026-01-05T08:30:00Z","created_at":"2025-11-20T02:15:00Z","version":3}})),
(status = 401, description = "会话未绑定用户,或账号已被删除(`unauthenticated`)", body = AppResponseData<NoData>, example = json!({"code": "unauthenticated", "message": "authentication required"})),
(status = 500, description = "服务端故障(`internal`、`database`、`cache`、`session`、`serialization`)", body = AppResponseData<NoData>, example = json!({"code": "internal", "message": "internal server error"}))
)
)]
pub async fn me(
State(svc): State<crate::AuthService>,
session: Session,
request_id: RequestId,
) -> Result<AppResponseData<MeResponse>, ApiError> {
let response = svc.me(session, request_id.0).await?;
Ok(AppResponseData::ok(response))
}