@paultaku/node-mock-server
Version:
A TypeScript-based mock server with automatic Swagger-based mock file generation
91 lines • 3.23 kB
TypeScript
/**
* ScenarioManager Implementation
*
* High-level service for managing scenario CRUD operations.
* Coordinates between ScenarioRepository, ActiveScenarioTracker, and ScenarioApplicator.
*
* @see specs/004-scenario-management/data-model.md
* @see tests/unit/scenario-manager.test.ts
*/
import { Scenario, CreateScenarioRequest, UpdateScenarioRequest, ListScenariosResponse, IScenarioRepository, IActiveScenarioTracker } from '../../shared/types/scenario-types';
import { ScenarioApplicator } from './scenario-applicator';
/**
* Service for managing scenario lifecycle
*
* Responsibilities:
* - Create, update, delete, list, and get scenarios
* - Auto-generate scenario metadata (timestamps, version)
* - Apply scenarios to endpoint status.json files
* - Track active scenario
* - Validate business rules (duplicates, empty scenarios)
*/
export declare class ScenarioManager {
private readonly repository;
private readonly tracker;
private readonly applicator;
constructor(repository: IScenarioRepository, tracker: IActiveScenarioTracker, applicator: ScenarioApplicator);
/**
* Create a new scenario
*
* Steps:
* 1. Validate request (empty, duplicates)
* 2. Generate metadata
* 3. Save to repository
*
* Note: Scenario is NOT automatically applied. Use activate endpoint to apply.
*
* @throws DuplicateScenarioError if scenario name already exists
* @throws EmptyScenarioError if no endpoint configurations
* @throws DuplicateEndpointError if duplicate endpoints in request
*/
create(request: CreateScenarioRequest): Promise<Scenario>;
/**
* Update an existing scenario
*
* Steps:
* 1. Validate request (empty, duplicates)
* 2. Load existing scenario
* 3. Update endpoint configurations and metadata
* 4. Save to repository
*
* Note: Scenario is NOT automatically applied. Use activate endpoint to apply.
*
* @throws ScenarioNotFoundError if scenario doesn't exist
* @throws EmptyScenarioError if no endpoint configurations
* @throws DuplicateEndpointError if duplicate endpoints in request
*/
update(name: string, request: UpdateScenarioRequest): Promise<Scenario>;
/**
* Delete a scenario
*
* Steps:
* 1. Check if scenario exists
* 2. Delete from repository
* 3. Clear active scenario if it was the deleted one
*
* @throws ScenarioNotFoundError if scenario doesn't exist
*/
delete(name: string): Promise<void>;
/**
* List all scenarios with active scenario indicator
*
* @returns List of all scenarios and the name of the active scenario
*/
list(): Promise<ListScenariosResponse>;
/**
* Get a scenario by name
*
* @throws ScenarioNotFoundError if scenario doesn't exist
*/
get(name: string): Promise<Scenario>;
/**
* Validate that there are no duplicate endpoints in the configuration array
*
* Uses Map-based lookup for O(n) performance.
*
* @throws DuplicateEndpointError if duplicates found
* @private
*/
private validateNoDuplicateEndpoints;
}
//# sourceMappingURL=scenario-manager.d.ts.map