@jimmy2822/claude-code-sub-agents-mode
Version:
TypeScript Clean Architecture Multi-Agent Framework for Claude Code CLI Integration
73 lines (61 loc) • 2.25 kB
text/typescript
/**
* Create Project Use Case - Application Layer
* Business logic for creating a new project
*/
import { Project, ProjectStatus, Requirement, AcceptanceCriteria } from '../../domain/entities/Project';
import { IProjectRepository } from '../../domain/repositories/IProjectRepository';
import { ProjectAnalyzer } from '../services/ProjectAnalyzer';
import { RequirementAnalyzer } from '../services/RequirementAnalyzer';
export interface CreateProjectInput {
requirement: string;
}
export interface CreateProjectOutput {
project: Project;
success: boolean;
message?: string;
}
export class CreateProjectUseCase {
constructor(
private projectRepository: IProjectRepository,
private projectAnalyzer: ProjectAnalyzer,
private requirementAnalyzer: RequirementAnalyzer
) {}
async execute(input: CreateProjectInput): Promise<CreateProjectOutput> {
try {
// Generate new project ID
const projectId = await this.projectRepository.getNextId();
// Analyze requirements
const requirements = await this.requirementAnalyzer.analyze(input.requirement);
// Generate acceptance criteria
const acceptanceCriteria = await this.requirementAnalyzer.generateAcceptanceCriteria(requirements);
// Create project entity
const project = new Project(
projectId,
input.requirement,
'analyzing' as ProjectStatus,
'requirement_analysis',
requirements,
acceptanceCriteria
);
// Analyze project complexity and generate plan
const analysis = await this.projectAnalyzer.analyze(project);
project.plan = analysis.plan;
// Update status to awaiting approval
project.updateStatus('awaiting_approval');
project.addUpdate('Project analysis complete - awaiting approval');
// Save to repository
await this.projectRepository.save(project);
return {
project,
success: true,
message: `Project #${projectId} created successfully`
};
} catch (error) {
return {
project: null as any,
success: false,
message: `Failed to create project: ${error instanceof Error ? error.message : 'Unknown error'}`
};
}
}
}