Move src/ → apps/server/ and packages/web/ → apps/web/ to adopt standard monorepo conventions (apps/ for runnable apps, packages/ for reusable libraries). Update all config files, shared package imports, test fixtures, and documentation to reflect new paths. Key fixes: - Update workspace config to ["apps/*", "packages/*"] - Update tsconfig.json rootDir/include for apps/server/ - Add apps/web/** to vitest exclude list - Update drizzle.config.ts schema path - Fix ensure-schema.ts migration path detection (3 levels up in dev, 2 levels up in dist) - Fix tests/integration/cli-server.test.ts import paths - Update packages/shared imports to apps/server/ paths - Update all docs/ files with new paths
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
/**
|
|
* 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<NewProject, 'id' | 'createdAt' | 'updatedAt'>;
|
|
|
|
/**
|
|
* Data for updating a project.
|
|
* Name is immutable (used as directory name for worktrees).
|
|
*/
|
|
export type UpdateProjectData = Omit<Partial<CreateProjectData>, 'name'>;
|
|
|
|
/**
|
|
* Project Repository Port
|
|
*/
|
|
export interface ProjectRepository {
|
|
create(data: CreateProjectData): Promise<Project>;
|
|
findById(id: string): Promise<Project | null>;
|
|
findByName(name: string): Promise<Project | null>;
|
|
findAll(): Promise<Project[]>;
|
|
update(id: string, data: UpdateProjectData): Promise<Project>;
|
|
delete(id: string): Promise<void>;
|
|
|
|
// Junction ops
|
|
addProjectToInitiative(initiativeId: string, projectId: string): Promise<void>;
|
|
removeProjectFromInitiative(initiativeId: string, projectId: string): Promise<void>;
|
|
findProjectsByInitiativeId(initiativeId: string): Promise<Project[]>;
|
|
setInitiativeProjects(initiativeId: string, projectIds: string[]): Promise<void>;
|
|
}
|