huskies: merge 610_story_extract_wizard_service
This commit is contained in:
+11
-31
@@ -1,6 +1,7 @@
|
||||
//! HTTP wizard endpoints — REST API for the project setup wizard.
|
||||
use crate::http::context::{AppContext, OpenApiResult, bad_request, not_found};
|
||||
use crate::io::wizard::{StepStatus, WizardState, WizardStep};
|
||||
use crate::io::wizard::{WizardState, WizardStep};
|
||||
use crate::service::wizard as svc;
|
||||
use poem_openapi::{Object, OpenApi, Tags, param::Path, payload::Json};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::sync::Arc;
|
||||
@@ -80,8 +81,7 @@ impl WizardApi {
|
||||
#[oai(path = "/wizard", method = "get")]
|
||||
async fn get_wizard_state(&self) -> OpenApiResult<Json<WizardResponse>> {
|
||||
let root = self.ctx.state.get_project_root().map_err(bad_request)?;
|
||||
let state =
|
||||
WizardState::load(&root).ok_or_else(|| not_found("No wizard active".to_string()))?;
|
||||
let state = svc::get_state(&root).map_err(|_| not_found("No wizard active".to_string()))?;
|
||||
Ok(Json(WizardResponse::from(&state)))
|
||||
}
|
||||
|
||||
@@ -97,16 +97,8 @@ impl WizardApi {
|
||||
) -> OpenApiResult<Json<WizardResponse>> {
|
||||
let root = self.ctx.state.get_project_root().map_err(bad_request)?;
|
||||
let wizard_step = parse_step(&step.0)?;
|
||||
let mut state =
|
||||
WizardState::load(&root).ok_or_else(|| not_found("No wizard active".to_string()))?;
|
||||
|
||||
state.set_step_status(
|
||||
wizard_step,
|
||||
StepStatus::AwaitingConfirmation,
|
||||
payload.0.content,
|
||||
);
|
||||
state.save(&root).map_err(bad_request)?;
|
||||
|
||||
let state = svc::set_step_content(&root, wizard_step, payload.0.content)
|
||||
.map_err(|e| bad_request(e.to_string()))?;
|
||||
Ok(Json(WizardResponse::from(&state)))
|
||||
}
|
||||
|
||||
@@ -117,12 +109,8 @@ impl WizardApi {
|
||||
async fn confirm_step(&self, step: Path<String>) -> OpenApiResult<Json<WizardResponse>> {
|
||||
let root = self.ctx.state.get_project_root().map_err(bad_request)?;
|
||||
let wizard_step = parse_step(&step.0)?;
|
||||
let mut state =
|
||||
WizardState::load(&root).ok_or_else(|| not_found("No wizard active".to_string()))?;
|
||||
|
||||
state.confirm_step(wizard_step).map_err(bad_request)?;
|
||||
state.save(&root).map_err(bad_request)?;
|
||||
|
||||
let state =
|
||||
svc::mark_step_confirmed(&root, wizard_step).map_err(|e| bad_request(e.to_string()))?;
|
||||
Ok(Json(WizardResponse::from(&state)))
|
||||
}
|
||||
|
||||
@@ -133,12 +121,8 @@ impl WizardApi {
|
||||
async fn skip_step(&self, step: Path<String>) -> OpenApiResult<Json<WizardResponse>> {
|
||||
let root = self.ctx.state.get_project_root().map_err(bad_request)?;
|
||||
let wizard_step = parse_step(&step.0)?;
|
||||
let mut state =
|
||||
WizardState::load(&root).ok_or_else(|| not_found("No wizard active".to_string()))?;
|
||||
|
||||
state.skip_step(wizard_step).map_err(bad_request)?;
|
||||
state.save(&root).map_err(bad_request)?;
|
||||
|
||||
let state =
|
||||
svc::mark_step_skipped(&root, wizard_step).map_err(|e| bad_request(e.to_string()))?;
|
||||
Ok(Json(WizardResponse::from(&state)))
|
||||
}
|
||||
|
||||
@@ -147,12 +131,8 @@ impl WizardApi {
|
||||
async fn mark_generating(&self, step: Path<String>) -> OpenApiResult<Json<WizardResponse>> {
|
||||
let root = self.ctx.state.get_project_root().map_err(bad_request)?;
|
||||
let wizard_step = parse_step(&step.0)?;
|
||||
let mut state =
|
||||
WizardState::load(&root).ok_or_else(|| not_found("No wizard active".to_string()))?;
|
||||
|
||||
state.set_step_status(wizard_step, StepStatus::Generating, None);
|
||||
state.save(&root).map_err(bad_request)?;
|
||||
|
||||
let state = svc::mark_step_generating(&root, wizard_step)
|
||||
.map_err(|e| bad_request(e.to_string()))?;
|
||||
Ok(Json(WizardResponse::from(&state)))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user