diff options
| author | ojacobson <ojacobson@noreply.codeberg.org> | 2025-06-21 04:22:52 +0200 |
|---|---|---|
| committer | ojacobson <ojacobson@noreply.codeberg.org> | 2025-06-21 04:22:52 +0200 |
| commit | cd1dc0dab4b46bc5712070812192d5ce34071470 (patch) | |
| tree | c94f5a42f7e734b81892c1289a1d2b566706ba7c /src/boot | |
| parent | d84ba5cd09b713fac2f193d5c05af7415ea6742d (diff) | |
| parent | 4e3d5ccac99b24934c972e088cd7eb02bb95df06 (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 one place; if you know the path, you can read down the list to find the handler.
Handlers themselves live with the domain they are most appropriately "part of," generally (in this version, universally) in a `handlers` submodule. The handlers themselves have been flattened down; rather than representing a path and a method, they now represent a named operation (which is suspiciously similar to the path in most cases). This means that we no longer have constructs like `crate::ui::routes::ch::channel` - it's now `crate::ui::handlers::channel` instead.
## Disclaimer
I Solemnly Swear I Didn't Change Any Handlers.
## Prior art
I've inadvertently reinvented Django's `urls.py` convention, and I've opted to lean into that.
Merges flatter-routes-reorg into main.
Diffstat (limited to 'src/boot')
| -rw-r--r-- | src/boot/handlers/boot/mod.rs (renamed from src/boot/routes/get.rs) | 3 | ||||
| -rw-r--r-- | src/boot/handlers/boot/test.rs (renamed from src/boot/routes/test.rs) | 17 | ||||
| -rw-r--r-- | src/boot/handlers/mod.rs | 3 | ||||
| -rw-r--r-- | src/boot/mod.rs | 10 | ||||
| -rw-r--r-- | src/boot/routes/mod.rs | 11 |
5 files changed, 19 insertions, 25 deletions
diff --git a/src/boot/routes/get.rs b/src/boot/handlers/boot/mod.rs index 4873b7a..010f57b 100644 --- a/src/boot/routes/get.rs +++ b/src/boot/handlers/boot/mod.rs @@ -5,6 +5,9 @@ use axum::{ use crate::{app::App, boot::Snapshot, error::Internal, token::extract::Identity, user::User}; +#[cfg(test)] +mod test; + pub async fn handler(State(app): State<App>, identity: Identity) -> Result<Response, Internal> { let snapshot = app.boot().snapshot().await?; Ok(Response { diff --git a/src/boot/routes/test.rs b/src/boot/handlers/boot/test.rs index 55802fe..0a7622b 100644 --- a/src/boot/routes/test.rs +++ b/src/boot/handlers/boot/test.rs @@ -1,6 +1,5 @@ use axum::extract::State; -use super::get; use crate::test::fixtures; #[tokio::test] @@ -8,7 +7,7 @@ async fn returns_identity() { let app = fixtures::scratch_app().await; let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer.clone()) + let response = super::handler(State(app), viewer.clone()) .await .expect("boot always succeeds"); @@ -21,7 +20,7 @@ async fn includes_logins() { let spectator = fixtures::user::create(&app, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -34,7 +33,7 @@ async fn includes_channels() { let channel = fixtures::channel::create(&app, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -49,7 +48,7 @@ async fn includes_messages() { let message = fixtures::message::send(&app, &channel, &sender, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -70,7 +69,7 @@ async fn excludes_expired_messages() { .expect("expiry never fails"); let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -90,7 +89,7 @@ async fn excludes_deleted_messages() { .expect("deleting valid message succeeds"); let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -108,7 +107,7 @@ async fn excludes_expired_channels() { .expect("expiry never fails"); let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); @@ -126,7 +125,7 @@ async fn excludes_deleted_channels() { .expect("deleting a valid channel succeeds"); let viewer = fixtures::identity::fictitious(); - let response = get::handler(State(app), viewer) + let response = super::handler(State(app), viewer) .await .expect("boot always succeeds"); diff --git a/src/boot/handlers/mod.rs b/src/boot/handlers/mod.rs new file mode 100644 index 0000000..194c4a9 --- /dev/null +++ b/src/boot/handlers/mod.rs @@ -0,0 +1,3 @@ +mod boot; + +pub use boot::handler as boot; diff --git a/src/boot/mod.rs b/src/boot/mod.rs index 122bd53..48da4f0 100644 --- a/src/boot/mod.rs +++ b/src/boot/mod.rs @@ -1,11 +1,11 @@ -use crate::{channel::Channel, event::Sequence, message::Message, user::User}; -use serde::Serialize; use std::time::Duration; -pub mod app; -mod routes; +use serde::Serialize; -pub use self::routes::router; +use crate::{channel::Channel, event::Sequence, message::Message, user::User}; + +pub mod app; +pub mod handlers; #[derive(serde::Serialize)] pub struct Snapshot { diff --git a/src/boot/routes/mod.rs b/src/boot/routes/mod.rs deleted file mode 100644 index 8fd99d3..0000000 --- a/src/boot/routes/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -use axum::{Router, routing::get}; - -use crate::app::App; - -mod get; -#[cfg(test)] -mod test; - -pub fn router() -> Router<App> { - Router::new().route("/api/boot", get(get::handler)) -} |
