diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_basic_input_error_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_basic_input_error_handler.rs new file mode 100644 index 0000000000..7c80a83c31 --- /dev/null +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_basic_input_error_handler.rs @@ -0,0 +1,17 @@ +use actix_web::HttpResponse; + +use crate::http_server::common_responses::common_web_error::CommonWebError; + +/// Dev-only endpoint that unconditionally returns a `BadInputWithSimpleMessage` +/// so we can exercise error paths (paging, response shape, etc.) end-to-end. +#[utoipa::path( + get, + tag = "Dev", + path = "/v1/dev/basic_input_error", + responses( + (status = 400, description = "Always returns this — that's the point"), + ), +)] +pub async fn dev_basic_input_error_handler() -> Result { + Err(CommonWebError::BadInputWithSimpleMessage("testing".to_string())) +} diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_input_error_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_input_error_handler.rs new file mode 100644 index 0000000000..6acf2a019d --- /dev/null +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/dev_input_error_handler.rs @@ -0,0 +1,17 @@ +use actix_web::HttpResponse; + +use crate::http_server::common_responses::common_web_error::CommonWebError; + +/// Dev-only endpoint that unconditionally returns a `BadInputWithSimpleMessage` +/// so we can exercise error paths (paging, response shape, etc.) end-to-end. +#[utoipa::path( + get, + tag = "Dev", + path = "/v1/dev/input_error", + responses( + (status = 400, description = "Always returns this — that's the point"), + ), +)] +pub async fn dev_input_error_handler() -> Result { + Err(CommonWebError::BadInputWithSimpleMessage("testing".to_string())) +} diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/dev/mod.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/mod.rs new file mode 100644 index 0000000000..d4908db78b --- /dev/null +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/dev/mod.rs @@ -0,0 +1,2 @@ +pub mod dev_basic_input_error_handler; +pub mod dev_input_error_handler; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/mod.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/mod.rs index f725950848..180a64acd2 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/mod.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/mod.rs @@ -5,6 +5,7 @@ pub mod billing_fakeyou; pub mod characters; pub mod comments; pub mod credits; +pub mod dev; pub mod download_job; pub mod featured_items; pub mod generate; diff --git a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/add_application_routes.rs b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/add_application_routes.rs index cf3dc7c615..80b38ec548 100644 --- a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/add_application_routes.rs +++ b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/add_application_routes.rs @@ -3,6 +3,7 @@ use crate::http_server::routes::application_routes::billing_fakeyou_routes::add_ use crate::http_server::routes::application_routes::character_routes::add_character_routes; use crate::http_server::routes::application_routes::comments_routes::add_comments_routes; use crate::http_server::routes::application_routes::credits_routes::add_credits_routes; +use crate::http_server::routes::application_routes::dev_routes::add_dev_routes; use crate::http_server::routes::application_routes::featured_item_routes::add_featured_item_routes; use crate::http_server::routes::application_routes::generate_routes::add_generate_routes; use crate::http_server::routes::application_routes::job_routes::add_job_routes; @@ -63,6 +64,7 @@ where // Other useful tools app = add_analytics_routes(app); // /v1/analytics/... app = add_web_referrals_routes(app); // /v1/web_referrals/... + app = add_dev_routes(app); // /v1/dev/... — dev-only error/response shape probes // User and user-adjacent routes app = add_comments_routes(app); // /v1/comments/... diff --git a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/dev_routes.rs b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/dev_routes.rs new file mode 100644 index 0000000000..f3acc38637 --- /dev/null +++ b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/dev_routes.rs @@ -0,0 +1,31 @@ +use actix_http::body::MessageBody; +use actix_service::ServiceFactory; +use actix_web::dev::{ServiceRequest, ServiceResponse}; +use actix_web::error::Error; +use actix_web::{web, App, HttpResponse}; + +use crate::http_server::endpoints::dev::dev_basic_input_error_handler::dev_basic_input_error_handler; +use crate::http_server::endpoints::dev::dev_input_error_handler::dev_input_error_handler; + +pub fn add_dev_routes (app: App) -> App +where + B: MessageBody, + T: ServiceFactory< + ServiceRequest, + Config = (), + Response = ServiceResponse, + Error = Error, + InitError = (), + >, +{ + app.service(web::scope("/v1/dev") + .service(web::resource("/input_error") + .route(web::get().to(dev_input_error_handler)) + .route(web::head().to(|| HttpResponse::Ok())) + ) + .service(web::resource("/basic_input_error") + .route(web::get().to(dev_basic_input_error_handler)) + .route(web::head().to(|| HttpResponse::Ok())) + ) + ) +} diff --git a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/mod.rs b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/mod.rs index dff9844eae..22a8fc51e2 100644 --- a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/mod.rs +++ b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/mod.rs @@ -3,6 +3,7 @@ mod billing_fakeyou_routes; mod character_routes; mod comments_routes; mod credits_routes; +mod dev_routes; mod featured_item_routes; mod generate_routes; mod job_routes;