summaryrefslogtreecommitdiff
path: root/src/setup
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-06-17 02:11:45 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-06-18 18:31:40 -0400
commit4e3d5ccac99b24934c972e088cd7eb02bb95df06 (patch)
treec94f5a42f7e734b81892c1289a1d2b566706ba7c /src/setup
parent5ed96f8e8b9d9f19ee249f5c73a5a21ef6bca09f (diff)
Handlers are _named operations_, which can be exposed via routes.
Each domain module that exposes handlers does so through a `handlers` child module, ideally as a top-level symbol that can be plugged directly into Axum's `MethodRouter`. Modules could make exceptions to this - kill the doctrinaire inside yourself, after all - but none of the API modules that actually exist need such exceptions, and consistency is useful. The related details of request types, URL types, response types, errors, &c &c are then organized into modules under `handlers`, along with their respective tests.
Diffstat (limited to 'src/setup')
-rw-r--r--src/setup/handlers/mod.rs3
-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.rs2
-rw-r--r--src/setup/routes/mod.rs3
5 files changed, 15 insertions, 13 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 e741a60..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;
-pub mod routes;
pub use self::required::Required;
diff --git a/src/setup/routes/mod.rs b/src/setup/routes/mod.rs
deleted file mode 100644
index e94a249..0000000
--- a/src/setup/routes/mod.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-pub mod post;
-#[cfg(test)]
-mod test;