Homebrew RSS reader server
1use axum::middleware;
2use axum::routing::get;
3use axum::Router;
4use sqlx::SqlitePool;
5use tokio::sync::broadcast;
6
7use crate::api;
8
9#[derive(Clone)]
10pub struct AppState {
11 pub pool: SqlitePool,
12 pub api_key: String,
13 /// Send `Some(feed_id)` for single-feed refresh, `None` for all feeds.
14 pub refresh_trigger: Option<broadcast::Sender<Option<i64>>>,
15}
16
17pub fn router(state: AppState) -> Router {
18 let v1 = api::miniflux::v1_router().layer(middleware::from_fn_with_state(
19 state.clone(),
20 api::miniflux::auth::auth_middleware,
21 ));
22
23 Router::new()
24 .nest("/v1", v1)
25 // Health/readiness endpoints (unauthenticated, root-level)
26 .route("/healthcheck", get(api::miniflux::handlers::healthcheck))
27 .route("/liveness", get(api::miniflux::handlers::healthcheck))
28 .route("/healthz", get(api::miniflux::handlers::healthcheck))
29 .route("/readiness", get(api::miniflux::handlers::healthcheck))
30 .route("/readyz", get(api::miniflux::handlers::healthcheck))
31 .with_state(state)
32}