diff options
Diffstat (limited to 'makima/src/server/handlers')
| -rw-r--r-- | makima/src/server/handlers/templates.rs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/makima/src/server/handlers/templates.rs b/makima/src/server/handlers/templates.rs index 6d95e86..5cad44f 100644 --- a/makima/src/server/handlers/templates.rs +++ b/makima/src/server/handlers/templates.rs @@ -7,6 +7,76 @@ use utoipa::ToSchema; use crate::llm::templates; use crate::llm::templates::ContractTypeTemplate; +// ============================================================================= +// Contract Type Templates +// ============================================================================= + +/// Contract type template for API response +#[derive(Debug, Serialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct ContractTypeTemplate { + /// Template identifier (e.g., "simple", "specification") + pub id: String, + /// Display name + pub name: String, + /// Description of the contract type workflow + pub description: String, + /// Ordered list of phases for this contract type + pub phases: Vec<String>, + /// Default starting phase + pub default_phase: String, + /// Whether this is a built-in type (always available) + pub is_builtin: bool, +} + +/// Response for listing contract types +#[derive(Debug, Serialize, ToSchema)] +pub struct ListContractTypesResponse { + pub types: Vec<ContractTypeTemplate>, +} + +/// List available contract type templates +#[utoipa::path( + get, + path = "/api/v1/contract-types", + responses( + (status = 200, description = "Contract types retrieved successfully", body = ListContractTypesResponse) + ), + tag = "contract-types" +)] +pub async fn list_contract_types() -> impl IntoResponse { + let types = vec![ + ContractTypeTemplate { + id: "simple".to_string(), + name: "Simple".to_string(), + description: "Plan \u{2192} Execute: Simple workflow with a plan document".to_string(), + phases: vec!["plan".to_string(), "execute".to_string()], + default_phase: "plan".to_string(), + is_builtin: true, + }, + ContractTypeTemplate { + id: "specification".to_string(), + name: "Specification".to_string(), + description: "Research \u{2192} Specify \u{2192} Plan \u{2192} Execute \u{2192} Review: Full specification-driven development with TDD".to_string(), + phases: vec![ + "research".to_string(), + "specify".to_string(), + "plan".to_string(), + "execute".to_string(), + "review".to_string(), + ], + default_phase: "research".to_string(), + is_builtin: true, + }, + ]; + + ( + StatusCode::OK, + Json(ListContractTypesResponse { types }), + ) + .into_response() +} + /// Query parameters for listing templates #[derive(Debug, Deserialize, ToSchema)] pub struct ListTemplatesQuery { |
