Files
SerpentRace/SerpentRace_Backend/src/functions/Company/Queries/CompanyQueryDispatcher.ts
T
2025-07-11 19:56:28 +02:00

60 lines
2.0 KiB
TypeScript

import { ICompanyRepository } from '../../../Repositories/interfaces/ICompanyRepository';
import { CompanyQueryHandler } from './CompanyQueryHandler';
import {
GetCompanyByIdQuery,
GetCompanyByNameQuery,
GetAllCompaniesQuery,
GetBasicCompanyByIdQuery,
GetAllBasicCompaniesQuery
} from './CompanyQuery';
import { appLogger } from '../../../utils/logger';
export class CompanyQueryDispatcher {
private queryHandler: CompanyQueryHandler;
constructor(companyRepository: ICompanyRepository) {
appLogger.startup('Initializing CompanyQueryDispatcher...');
this.queryHandler = new CompanyQueryHandler(companyRepository);
appLogger.startup('CompanyQueryDispatcher initialized');
}
async dispatch(query: any): Promise<any> {
try {
appLogger.info('Dispatching company query', {
queryType: query.constructor.name,
action: 'dispatch_company_query'
});
switch (query.constructor) {
case GetCompanyByIdQuery:
return await this.queryHandler.handleGetById(query);
case GetCompanyByNameQuery:
return await this.queryHandler.handleGetByName(query);
case GetAllCompaniesQuery:
return await this.queryHandler.handleGetAll(query);
case GetBasicCompanyByIdQuery:
return await this.queryHandler.handleGetBasicById(query);
case GetAllBasicCompaniesQuery:
return await this.queryHandler.handleGetAllBasic(query);
default:
const errorMessage = `Unknown query type: ${query.constructor.name}`;
appLogger.errorEvent('Unknown company query type', 'dispatch_error', {
queryType: query.constructor.name
});
throw new Error(errorMessage);
}
} catch (error: any) {
appLogger.errorEvent('Error dispatching company query', 'dispatch_error', {
error: error.message,
queryType: query.constructor.name
});
throw error;
}
}
}