diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-06-17 02:03:28 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-06-18 18:31:40 -0400 |
| commit | 5ed96f8e8b9d9f19ee249f5c73a5a21ef6bca09f (patch) | |
| tree | 75aa0287535506aa88f5f6d5b70ad5f99373320e /src/cli.rs | |
| parent | 23c2f6fbc07f25a11826892d783bddcc93550d25 (diff) | |
Reorganize and consolidate HTTP routes.
HTTP routes are now defined in a single, unified module, pulling them out of the topical modules they were formerly part of.
This is intended to improve the navigability of the codebase. Previously, finding the handler corresponding to a specific endpoint required prior familiarity, though in practice you could usually guess from topic area. Now, all routes are defined in `crate::routes`.
Other than changing visibility, I've avoided making changes to the handlers at the ends of those routes.
Diffstat (limited to 'src/cli.rs')
| -rw-r--r-- | src/cli.rs | 39 |
1 files changed, 2 insertions, 37 deletions
@@ -6,7 +6,6 @@ use std::{future, io}; use axum::{ - Router, http::header, middleware, response::{IntoResponse, Response}, @@ -15,7 +14,7 @@ use clap::{CommandFactory, Parser}; use sqlx::sqlite::SqlitePool; use tokio::net; -use crate::{app::App, boot, channel, clock, db, event, expire, invite, message, setup, ui, user}; +use crate::{app::App, clock, db, routes}; /// Command-line entry point for running the `pilcrow` server. /// @@ -82,7 +81,7 @@ impl Args { let pool = self.pool().await?; let app = App::from(pool); - let app = routers(&app) + let app = routes::routes(&app) .route_layer(middleware::from_fn(clock::middleware)) .route_layer(middleware::map_response(Self::server_info())) .with_state(app); @@ -123,40 +122,6 @@ impl Args { } } -fn routers(app: &App) -> Router<App> { - [ - [ - // API endpoints that require setup to function - boot::router(), - channel::router(), - event::router(), - invite::router(), - user::router(), - message::router(), - ] - .into_iter() - .fold(Router::default(), Router::merge) - // Run expiry whenever someone accesses the API. This was previously a blanket middleware - // affecting the whole service, but loading the client makes a several requests before the - // client can completely load, each of which was triggering expiry. There is absolutely no - // upside to re-checking expiry tens of times back-to-back like that; the API is accessed - // more regularly and with less of a traffic rush. - // - // This should, probably, be moved to a background job at some point. - .route_layer(middleware::from_fn_with_state( - app.clone(), - expire::middleware, - )) - .route_layer(setup::Required(app.clone())), - // API endpoints that handle setup - setup::router(), - // The UI (handles setup state itself) - ui::router(app), - ] - .into_iter() - .fold(Router::default(), Router::merge) -} - fn started_msg(listener: &net::TcpListener) -> io::Result<String> { let local_addr = listener.local_addr()?; Ok(format!("listening on http://{local_addr}/")) |
