Skip to content
Clone
a06673b
36 lines 976 B Rust
use axum::Json;
use axum::extract::{Query, State};
use jwt::extractor::AuthUser;
use serde::Deserialize;
use crate::error::UserResult;
use crate::features::UserService;
use crate::features::notifications::RecentMentionView;
#[derive(Deserialize, Default)]
pub struct RecentQuery {
#[serde(default = "default_limit")]
pub limit: usize,
}
fn default_limit() -> usize {
20
}
#[utoipa::path(
get,
path = "/user/me/recent-mentions",
tag = "user",
params(("limit" = Option<usize>, Query, description = "Maximum items (default 20).")),
responses(
(status = 200, description = "Recent mentions for the caller.", body = Vec<RecentMentionView>),
),
security(("bearer_auth" = [])),
)]
pub(crate) async fn handler(
State(svc): State<UserService>,
AuthUser { claims }: AuthUser,
Query(q): Query<RecentQuery>,
) -> UserResult<Json<Vec<RecentMentionView>>> {
Ok(Json(svc.list_recent_mentions(claims.sub, q.limit).await?))
}