/** * Project Repository Port Interface * * Port for Project aggregate operations and initiative-project junction. * Implementations (Drizzle, etc.) are adapters. */ import type { Project, NewProject } from '../schema.js'; /** * Data for creating a new project. * Omits system-managed fields (id, createdAt, updatedAt). */ export type CreateProjectData = Omit; /** * Data for updating a project. * Name is immutable (used as directory name for worktrees). */ export type UpdateProjectData = Omit, 'name'>; /** * Project Repository Port */ export interface ProjectRepository { create(data: CreateProjectData): Promise; findById(id: string): Promise; findByName(name: string): Promise; findAll(): Promise; update(id: string, data: UpdateProjectData): Promise; delete(id: string): Promise; // Junction ops addProjectToInitiative(initiativeId: string, projectId: string): Promise; removeProjectFromInitiative(initiativeId: string, projectId: string): Promise; findProjectsByInitiativeId(initiativeId: string): Promise; setInitiativeProjects(initiativeId: string, projectIds: string[]): Promise; }