From dd27cd5313acca7044430db05d3a213a6a87911d Mon Sep 17 00:00:00 2001
From: clauspeterhuebner
Date: Thu, 5 Feb 2026 23:06:17 +0100
Subject: [PATCH] correct implementation of command registering and creation
---
core/src/command/CommandFactory.ts | 10 ++++++---
core/src/command/CommandTypes.ts | 5 +++++
core/src/command/commands/SendEmailCommand.ts | 21 +++++++++++--------
3 files changed, 24 insertions(+), 12 deletions(-)
create mode 100644 core/src/command/CommandTypes.ts
diff --git a/core/src/command/CommandFactory.ts b/core/src/command/CommandFactory.ts
index af367b276..7f39d3b02 100644
--- a/core/src/command/CommandFactory.ts
+++ b/core/src/command/CommandFactory.ts
@@ -2,13 +2,14 @@ import { Command } from './Command';
import { BaseCommand } from './BaseCommand';
import { getLogger } from 'log4js';
import { LOG4JS_BASE_CATEGORY_NAME } from '../config/const';
+import { ICommandConstructor } from './CommandTypes';
const createLogger = (method: string) =>
getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.CommandFactory.${method}`)
export class CommandFactory {
private static instance: CommandFactory;
- private commands: Map Command> = new Map();
+ private commands: Map = new Map();
private constructor() {}
@@ -19,10 +20,10 @@ export class CommandFactory {
return CommandFactory.instance;
}
- registerCommand(name: string, commandClass: new (params: any) => Command): void {
+ registerCommand(name: string, commandClass: ICommandConstructor): void {
const methodLogger = createLogger(`registerCommand`)
if (methodLogger.isDebugEnabled()) {
- methodLogger.debug(`registerCommand() name=${name}`)
+ methodLogger.debug(`registerCommand() name=${name}, commandClass=${commandClass.name}`)
}
this.commands.set(name, commandClass);
if (methodLogger.isDebugEnabled()) {
@@ -36,6 +37,9 @@ export class CommandFactory {
methodLogger.debug(`createCommand() name=${name} params=${JSON.stringify(params)}`)
}
const CommandClass = this.commands.get(name);
+ if (methodLogger.isDebugEnabled()) {
+ methodLogger.debug(`createCommand() name=${name} commandClass=${CommandClass ? CommandClass.name : 'null'}`)
+ }
if (!CommandClass) {
const errmsg = `Command ${name} not found`;
methodLogger.error(errmsg);
diff --git a/core/src/command/CommandTypes.ts b/core/src/command/CommandTypes.ts
new file mode 100644
index 000000000..70fc16515
--- /dev/null
+++ b/core/src/command/CommandTypes.ts
@@ -0,0 +1,5 @@
+import { Command } from "./Command";
+
+export interface ICommandConstructor {
+ new (params: any): Command;
+}
diff --git a/core/src/command/commands/SendEmailCommand.ts b/core/src/command/commands/SendEmailCommand.ts
index 2caf51b76..78db629bc 100644
--- a/core/src/command/commands/SendEmailCommand.ts
+++ b/core/src/command/commands/SendEmailCommand.ts
@@ -7,19 +7,20 @@ import { getLogger } from 'log4js';
const createLogger = (method: string) =>
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 }> {
static readonly SEND_MAIL_COMMAND = 'SEND_MAIL_COMMAND';
protected requiredFields: string[] = ['mailType', 'senderComUuid', 'senderGradidoId', 'receiverComUuid', 'receiverGradidoId'];
- constructor(params: {
- mailType: string,
- senderComUuid: string,
- senderGradidoId: string,
- receiverComUuid: string,
- receiverGradidoId: string,
- memo?: string,
- amount?: number,
- }) {
+ constructor(params: SendEmailCommandParams) {
super(params);
}
@@ -28,6 +29,8 @@ export class SendEmailCommand extends BaseCommand<{ success: boolean }> {
if (!baseValid) {
return false;
}
+ // Additional validations
+
return true;
}