godchat_core/ports/
driving.rs1use crate::types::*;
2
3pub trait ProjectManager: Send + Sync {
4 fn list(&self) -> Vec<Project>;
5 fn get(&self, id: &ProjectId) -> Option<Project>;
6 fn upsert(&self, project: &Project);
7 fn overview(&self, id: &ProjectId) -> Option<ProjectOverview>;
8 fn status_report(&self) -> StatusReport;
9}
10
11pub trait TaskManager: Send + Sync {
12 fn branch(
13 &self,
14 project_id: &ProjectId,
15 name: TaskName,
16 title: String,
17 context_brief: String,
18 parent_id: Option<TaskId>,
19 ) -> Result<BranchResult, TaskError>;
20
21 fn transition(&self, id: &TaskId, to: TaskStatus) -> Result<TaskSummary, TaskError>;
22 fn complete(&self, id: &TaskId, summary: &str) -> Result<TaskSummary, TaskError>;
23 fn get(&self, id: &TaskId) -> Option<TaskSummary>;
24 fn children(&self, id: &TaskId) -> Vec<TaskSummary>;
25}