tuitbot_server/routes/
replies.rs1use std::sync::Arc;
4
5use axum::extract::{Query, State};
6use axum::Json;
7use serde::Deserialize;
8use serde_json::{json, Value};
9use tuitbot_core::storage::replies;
10
11use crate::account::AccountContext;
12use crate::error::ApiError;
13use crate::state::AppState;
14
15#[derive(Deserialize)]
17pub struct RepliesQuery {
18 #[serde(default = "default_limit")]
20 pub limit: u32,
21 #[serde(default)]
23 pub offset: u32,
24}
25
26fn default_limit() -> u32 {
27 50
28}
29
30pub async fn list_replies(
32 State(state): State<Arc<AppState>>,
33 ctx: AccountContext,
34 Query(params): Query<RepliesQuery>,
35) -> Result<Json<Value>, ApiError> {
36 let replies =
37 replies::get_recent_replies_for(&state.db, &ctx.account_id, params.limit, params.offset)
38 .await?;
39 Ok(Json(json!(replies)))
40}