mcp-quiz-server
Version:
🧠AI-Powered Quiz Management via Model Context Protocol (MCP) - Create, manage, and take quizzes directly from VS Code, Claude, and other AI agents.
110 lines (109 loc) • 3.65 kB
JavaScript
;
/**
* @fileoverview HTTP Controller Factory - Clean Architecture Integration
* @version 1.0.0
* @since 2025-07-30
* @module ControllerFactory
* @description Factory for creating HTTP controllers with Clean Architecture dependencies
* @requirementsTraceability {@link Requirements.REQ_ROUTES_004} - DI Container Integration with Graceful Fallback
* @requirementsTraceability {@link Requirements.REQ_ARCH_002} - Clean Architecture Patterns
* @testType unit
*
* @architecture
* Layer: Infrastructure (HTTP Factory)
* Pattern: Factory Pattern + Dependency Injection
* Dependencies: DIContainer, Controllers
*
* @relationships
* DEPENDS_ON:
* - DIContainer (Infrastructure)
* - QuizController (Infrastructure)
* USED_BY:
* - Express HTTP server
* - HTTP route setup
*
* @contributors Claude Code Agent
* @testCoverage HTTP integration tests
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ControllerFactory = void 0;
const QuizController_1 = require("./controllers/QuizController");
/**
* HTTP Controller Factory
*
* @description Creates and configures HTTP controllers with proper dependency injection.
* Provides a central place to manage controller lifecycle and dependencies.
*
* @example
* ```typescript
* const controllerFactory = new ControllerFactory({ container });
* const quizController = controllerFactory.createQuizController();
* app.post('/quiz/create', quizController.createQuiz.bind(quizController));
* ```
*
* @since 2025-07-30
* @author Claude Code Agent
*/
class ControllerFactory {
constructor(dependencies) {
this.controllers = new Map();
this.container = dependencies.container;
}
/**
* Create Quiz Controller
*
* @description Creates a singleton instance of QuizController with proper dependencies.
* Controllers are cached to ensure consistent behavior across requests.
*
* @returns QuizController instance
*/
createQuizController() {
if (!this.controllers.has('QuizController')) {
const controller = new QuizController_1.QuizController({
container: this.container,
});
this.controllers.set('QuizController', controller);
console.log('✅ Created QuizController with Clean Architecture integration');
}
return this.controllers.get('QuizController');
}
/**
* Get all available controllers
*
* @description Returns a map of all created controllers for inspection or testing.
*
* @returns Map of controller instances
*/
getAllControllers() {
return new Map(this.controllers);
}
/**
* Check if Clean Architecture is available for controllers
*
* @description Verifies that the necessary Clean Architecture components
* are available in the DI container.
*
* @returns boolean indicating Clean Architecture availability
*/
hasCleanArchitecture() {
try {
// Check if key services are available
this.container.resolve('CreateQuizCommandHandler');
this.container.resolve('GetQuizQueryHandler');
return true;
}
catch (_a) {
return false;
}
}
/**
* Clear controller cache
*
* @description Clears the controller cache, useful for testing or hot reloading.
*/
clearCache() {
this.controllers.clear();
console.log('🔄 Controller cache cleared');
}
}
exports.ControllerFactory = ControllerFactory;