use crate::types::*;
pub trait ProjectManager: Send + Sync {
fn list(&self) -> Vec<Project>;
fn get(&self, id: &ProjectId) -> Option<Project>;
fn upsert(&self, project: &Project);
fn overview(&self, id: &ProjectId) -> Option<ProjectOverview>;
fn status_report(&self) -> StatusReport;
}
pub trait TaskManager: Send + Sync {
fn branch(
&self,
project_id: &ProjectId,
name: TaskName,
title: String,
context_brief: String,
parent_id: Option<TaskId>,
) -> Result<BranchResult, TaskError>;
fn transition(&self, id: &TaskId, to: TaskStatus) -> Result<TaskSummary, TaskError>;
fn complete(&self, id: &TaskId, summary: &str) -> Result<TaskSummary, TaskError>;
fn get(&self, id: &TaskId) -> Option<TaskSummary>;
fn children(&self, id: &TaskId) -> Vec<TaskSummary>;
}