ito_core/
planning_init.rs1use crate::errors::{CoreError, CoreResult};
7use ito_domain::planning::{
8 milestones_dir, planning_dir, project_md_template, roadmap_md_template, state_md_template,
9};
10use std::path::Path;
11
12pub fn init_planning_structure(
16 ito_path: &Path,
17 current_date: &str,
18 ito_dir: &str,
19) -> std::io::Result<()> {
20 let planning = planning_dir(ito_path);
21 std::fs::create_dir_all(&planning)?;
22 std::fs::create_dir_all(milestones_dir(ito_path))?;
23
24 let project_path = planning.join("PROJECT.md");
25 if !project_path.exists() {
26 std::fs::write(project_path, project_md_template(None, None))?;
27 }
28 let roadmap_path = planning.join("ROADMAP.md");
29 if !roadmap_path.exists() {
30 std::fs::write(roadmap_path, roadmap_md_template())?;
31 }
32 let state_path = planning.join("STATE.md");
33 if !state_path.exists() {
34 std::fs::write(state_path, state_md_template(current_date, ito_dir))?;
35 }
36 Ok(())
37}
38
39pub fn read_planning_status(ito_path: &Path) -> CoreResult<String> {
41 let roadmap_path = planning_dir(ito_path).join("ROADMAP.md");
42 ito_common::io::read_to_string(&roadmap_path)
43 .map_err(|e| CoreError::io("reading ROADMAP.md", std::io::Error::other(e)))
44}