From a21017b3798481de80eeb7cebc3d868293362c26 Mon Sep 17 00:00:00 2001 From: Nikolaus Heger Date: Tue, 3 Feb 2026 15:08:55 +0800 Subject: [PATCH] add quest tweets endpoint --- src/handlers/relevant_tweet.rs | 29 +++++++++++++++++++++++++++++ src/routes/relevant_tweet.rs | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/handlers/relevant_tweet.rs b/src/handlers/relevant_tweet.rs index 834db71..30612e0 100644 --- a/src/handlers/relevant_tweet.rs +++ b/src/handlers/relevant_tweet.rs @@ -61,6 +61,35 @@ pub async fn handle_get_relevant_tweet_by_id( Ok(SuccessResponse::new(tweet)) } +/// GET /quest-tweets +/// Public endpoint for fetching raid target tweets (sorted by created_at DESC) +pub async fn handle_get_quest_tweets( + State(state): State, + Query(params): Query>, + Query(filters): Query, +) -> Result>, AppError> { + validate_pagination_query(params.page, params.page_size)?; + + let total_items = state.db.relevant_tweets.count_filtered(¶ms, &filters).await? as u32; + let total_pages = calculate_total_pages(params.page_size, total_items); + + let tweets = state + .db + .relevant_tweets + .find_all_with_authors(¶ms, &filters) + .await?; + + Ok(Json(PaginatedResponse { + data: tweets, + meta: PaginationMetadata { + page: params.page, + page_size: params.page_size, + total_items, + total_pages, + }, + })) +} + #[cfg(test)] mod tests { use axum::{body::Body, extract::Request, http::StatusCode, routing::get, Router}; diff --git a/src/routes/relevant_tweet.rs b/src/routes/relevant_tweet.rs index 7e38d7d..313beff 100644 --- a/src/routes/relevant_tweet.rs +++ b/src/routes/relevant_tweet.rs @@ -1,7 +1,7 @@ use axum::{handler::Handler, middleware, routing::get, Router}; use crate::{ - handlers::relevant_tweet::{handle_get_relevant_tweet_by_id, handle_get_relevant_tweets}, + handlers::relevant_tweet::{handle_get_quest_tweets, handle_get_relevant_tweet_by_id, handle_get_relevant_tweets}, http_server::AppState, middlewares::jwt_auth, }; @@ -18,4 +18,5 @@ pub fn relevant_tweet_routes(state: AppState) -> Router { get(handle_get_relevant_tweet_by_id .layer(middleware::from_fn_with_state(state.clone(), jwt_auth::jwt_admin_auth))), ) + .route("/quest-tweets", get(handle_get_quest_tweets)) }