use axum::{
Json,
extract::{Path, Query, State},
http::HeaderMap,
};
use super::super::support::{FetchResult, fetch_error_response, twitter_fetcher};
use super::types::{TwitterRepliesQuery, TwitterSearchQuery, TwitterTimelineQuery};
use crate::platforms::twitter::{
TwitterTweet, TwitterTweetPage, TwitterTweetSearchPage, TwitterUserPage,
};
use crate::server::state::AppState;
pub async fn twitter_search_tweets(
Query(query): Query<TwitterSearchQuery>,
headers: HeaderMap,
State(state): State<AppState>,
) -> FetchResult<TwitterTweetSearchPage> {
twitter_fetcher(&state, &headers)
.search_tweets(
&query.query,
query.search_type,
query.count,
query.cursor.as_deref(),
)
.await
.map(Json)
.map_err(fetch_error_response)
}
pub async fn twitter_tweet_detail(
Path(tweet_id): Path<String>,
headers: HeaderMap,
State(state): State<AppState>,
) -> FetchResult<TwitterTweet> {
twitter_fetcher(&state, &headers)
.fetch_tweet_detail(&tweet_id)
.await
.map(Json)
.map_err(fetch_error_response)
}
pub async fn twitter_tweet_replies(
Path(tweet_id): Path<String>,
Query(query): Query<TwitterRepliesQuery>,
headers: HeaderMap,
State(state): State<AppState>,
) -> FetchResult<TwitterTweetPage> {
twitter_fetcher(&state, &headers)
.fetch_tweet_replies(&tweet_id, query.cursor.as_deref(), query.sort_by)
.await
.map(Json)
.map_err(fetch_error_response)
}
pub async fn twitter_tweet_likers(
Path(tweet_id): Path<String>,
Query(query): Query<TwitterTimelineQuery>,
headers: HeaderMap,
State(state): State<AppState>,
) -> FetchResult<TwitterUserPage> {
twitter_fetcher(&state, &headers)
.fetch_tweet_likers(&tweet_id, query.count, query.cursor.as_deref())
.await
.map(Json)
.map_err(fetch_error_response)
}
pub async fn twitter_tweet_retweeters(
Path(tweet_id): Path<String>,
Query(query): Query<TwitterTimelineQuery>,
headers: HeaderMap,
State(state): State<AppState>,
) -> FetchResult<TwitterUserPage> {
twitter_fetcher(&state, &headers)
.fetch_tweet_retweeters(&tweet_id, query.count, query.cursor.as_deref())
.await
.map(Json)
.map_err(fetch_error_response)
}