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/setup | |
| 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/setup')
| -rw-r--r-- | src/setup/handlers/mod.rs | 3 | ||||
| -rw-r--r-- | src/setup/handlers/setup/mod.rs (renamed from src/setup/routes/post.rs) | 3 | ||||
| -rw-r--r-- | src/setup/handlers/setup/test.rs (renamed from src/setup/routes/test.rs) | 17 | ||||
| -rw-r--r-- | src/setup/mod.rs | 4 | ||||
| -rw-r--r-- | src/setup/routes/mod.rs | 11 |
5 files changed, 16 insertions, 22 deletions
diff --git a/src/setup/handlers/mod.rs b/src/setup/handlers/mod.rs new file mode 100644 index 0000000..3d4a4e6 --- /dev/null +++ b/src/setup/handlers/mod.rs @@ -0,0 +1,3 @@ +mod setup; + +pub use setup::handler as setup; diff --git a/src/setup/routes/post.rs b/src/setup/handlers/setup/mod.rs index 0ff5d69..cbb3072 100644 --- a/src/setup/routes/post.rs +++ b/src/setup/handlers/setup/mod.rs @@ -14,6 +14,9 @@ use crate::{ user::{Password, User}, }; +#[cfg(test)] +mod test; + pub async fn handler( State(app): State<App>, RequestedAt(setup_at): RequestedAt, diff --git a/src/setup/routes/test.rs b/src/setup/handlers/setup/test.rs index e9f5cd6..8243ac3 100644 --- a/src/setup/routes/test.rs +++ b/src/setup/handlers/setup/test.rs @@ -1,6 +1,5 @@ use axum::extract::{Json, State}; -use super::post; use crate::{setup::app, test::fixtures}; #[tokio::test] @@ -12,12 +11,12 @@ async fn fresh_instance() { // Call the endpoint let identity = fixtures::cookie::not_logged_in(); let (name, password) = fixtures::user::propose(); - let request = post::Request { + let request = super::Request { name: name.clone(), password: password.clone(), }; let (identity, Json(response)) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect("setup in a fresh app succeeds"); @@ -57,9 +56,9 @@ async fn login_exists() { // Call the endpoint let identity = fixtures::cookie::not_logged_in(); let (name, password) = fixtures::user::propose(); - let request = post::Request { name, password }; - let post::Error(error) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + let request = super::Request { name, password }; + let super::Error(error) = + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect_err("setup in a populated app fails"); @@ -79,12 +78,12 @@ async fn invalid_name() { let name = fixtures::user::propose_invalid_name(); let password = fixtures::user::propose_password(); let identity = fixtures::cookie::not_logged_in(); - let request = post::Request { + let request = super::Request { name: name.clone(), password: password.clone(), }; - let post::Error(error) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + let super::Error(error) = + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect_err("setup with an invalid name fails"); diff --git a/src/setup/mod.rs b/src/setup/mod.rs index a4b821c..f5d12df 100644 --- a/src/setup/mod.rs +++ b/src/setup/mod.rs @@ -1,6 +1,6 @@ pub mod app; +pub mod handlers; pub mod repo; mod required; -mod routes; -pub use self::{required::Required, routes::router}; +pub use self::required::Required; diff --git a/src/setup/routes/mod.rs b/src/setup/routes/mod.rs deleted file mode 100644 index 977a790..0000000 --- a/src/setup/routes/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -use axum::{Router, routing::post}; - -use crate::app::App; - -mod post; -#[cfg(test)] -mod test; - -pub fn router() -> Router<App> { - Router::new().route("/api/setup", post(post::handler)) -} |
