Skip to main content

godchat_core/ports/
driving.rs

1use 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}