UNPKG

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
"use strict"; /** * @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;