correct implementation of command registering and creation

This commit is contained in:
clauspeterhuebner 2026-02-05 23:06:17 +01:00
parent db2b35d148
commit dd27cd5313
3 changed files with 24 additions and 12 deletions

View File

@ -2,13 +2,14 @@ import { Command } from './Command';
import { BaseCommand } from './BaseCommand'; import { BaseCommand } from './BaseCommand';
import { getLogger } from 'log4js'; import { getLogger } from 'log4js';
import { LOG4JS_BASE_CATEGORY_NAME } from '../config/const'; import { LOG4JS_BASE_CATEGORY_NAME } from '../config/const';
import { ICommandConstructor } from './CommandTypes';
const createLogger = (method: string) => const createLogger = (method: string) =>
getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.CommandFactory.${method}`) getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.CommandFactory.${method}`)
export class CommandFactory { export class CommandFactory {
private static instance: CommandFactory; private static instance: CommandFactory;
private commands: Map<string, new (params: any) => Command> = new Map(); private commands: Map<string, ICommandConstructor> = new Map();
private constructor() {} private constructor() {}
@ -19,10 +20,10 @@ export class CommandFactory {
return CommandFactory.instance; return CommandFactory.instance;
} }
registerCommand(name: string, commandClass: new (params: any) => Command): void { registerCommand<T>(name: string, commandClass: ICommandConstructor<T>): void {
const methodLogger = createLogger(`registerCommand`) const methodLogger = createLogger(`registerCommand`)
if (methodLogger.isDebugEnabled()) { if (methodLogger.isDebugEnabled()) {
methodLogger.debug(`registerCommand() name=${name}`) methodLogger.debug(`registerCommand() name=${name}, commandClass=${commandClass.name}`)
} }
this.commands.set(name, commandClass); this.commands.set(name, commandClass);
if (methodLogger.isDebugEnabled()) { if (methodLogger.isDebugEnabled()) {
@ -36,6 +37,9 @@ export class CommandFactory {
methodLogger.debug(`createCommand() name=${name} params=${JSON.stringify(params)}`) methodLogger.debug(`createCommand() name=${name} params=${JSON.stringify(params)}`)
} }
const CommandClass = this.commands.get(name); const CommandClass = this.commands.get(name);
if (methodLogger.isDebugEnabled()) {
methodLogger.debug(`createCommand() name=${name} commandClass=${CommandClass ? CommandClass.name : 'null'}`)
}
if (!CommandClass) { if (!CommandClass) {
const errmsg = `Command ${name} not found`; const errmsg = `Command ${name} not found`;
methodLogger.error(errmsg); methodLogger.error(errmsg);

View File

@ -0,0 +1,5 @@
import { Command } from "./Command";
export interface ICommandConstructor<T = any> {
new (params: any): Command<T>;
}

View File

@ -7,19 +7,20 @@ import { getLogger } from 'log4js';
const createLogger = (method: string) => const createLogger = (method: string) =>
getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.CommandExecutor.${method}`) getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.CommandExecutor.${method}`)
export interface SendEmailCommandParams {
mailType: string;
senderComUuid: string;
senderGradidoId: string;
receiverComUuid: string;
receiverGradidoId: string;
memo?: string;
amount?: number;
}
export class SendEmailCommand extends BaseCommand<{ success: boolean }> { export class SendEmailCommand extends BaseCommand<{ success: boolean }> {
static readonly SEND_MAIL_COMMAND = 'SEND_MAIL_COMMAND'; static readonly SEND_MAIL_COMMAND = 'SEND_MAIL_COMMAND';
protected requiredFields: string[] = ['mailType', 'senderComUuid', 'senderGradidoId', 'receiverComUuid', 'receiverGradidoId']; protected requiredFields: string[] = ['mailType', 'senderComUuid', 'senderGradidoId', 'receiverComUuid', 'receiverGradidoId'];
constructor(params: { constructor(params: SendEmailCommandParams) {
mailType: string,
senderComUuid: string,
senderGradidoId: string,
receiverComUuid: string,
receiverGradidoId: string,
memo?: string,
amount?: number,
}) {
super(params); super(params);
} }
@ -28,6 +29,8 @@ export class SendEmailCommand extends BaseCommand<{ success: boolean }> {
if (!baseValid) { if (!baseValid) {
return false; return false;
} }
// Additional validations
return true; return true;
} }