gradido/core/src/command/commands/SendEmailCommand.ts
clauspeterhuebner 9b5e64d455 cleanup code
2026-02-18 16:55:51 +01:00

96 lines
4.0 KiB
TypeScript

import { BaseCommand } from '../BaseCommand';
import { sendTransactionReceivedEmail } from '../../emails/sendEmailVariants';
import { findUserByUuids } from 'database';
import { LOG4JS_BASE_CATEGORY_NAME } from '../../config/const';
import { getLogger } from 'log4js';
import Decimal from 'decimal.js-light';
const createLogger = (method: string) =>
getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.command.commands.SendEmailCommand.${method}`)
export interface SendEmailCommandParams {
mailType: string;
senderComUuid: string;
senderGradidoId: string;
receiverComUuid: string;
receiverGradidoId: string;
memo?: string;
amount?: string;
}
export class SendEmailCommand extends BaseCommand<Record<string, unknown> | boolean | null | Error> {
static readonly SEND_MAIL_COMMAND = 'SEND_MAIL_COMMAND';
protected requiredFields: string[] = ['mailType', 'senderComUuid', 'senderGradidoId', 'receiverComUuid', 'receiverGradidoId'];
protected sendEmailCommandParams: SendEmailCommandParams;
constructor(params: any[]) {
const methodLogger = createLogger(`constructor`)
methodLogger.debug(`constructor() params=${JSON.stringify(params)}`)
super(params);
this.sendEmailCommandParams = JSON.parse(params[0]) as SendEmailCommandParams;
}
validate(): boolean {
const baseValid = super.validate();
if (!baseValid) {
return false;
}
// Additional validations
return true;
}
async execute(): Promise<Record<string, unknown> | boolean | null | Error> {
const methodLogger = createLogger(`execute`)
methodLogger.debug(`execute() sendEmailCommandParams=${JSON.stringify(this.sendEmailCommandParams)}`)
let result: Record<string, unknown> | boolean | null | Error;
if (!this.validate()) {
throw new Error('Invalid command parameters');
}
// find sender user
methodLogger.debug(`find sender user: ${this.sendEmailCommandParams.senderComUuid} ${this.sendEmailCommandParams.senderGradidoId}`)
const senderUser = await findUserByUuids(this.sendEmailCommandParams.senderComUuid, this.sendEmailCommandParams.senderGradidoId, true);
methodLogger.debug(`senderUser=${JSON.stringify(senderUser)}`)
if (!senderUser) {
const errmsg = `Sender user not found: ${this.sendEmailCommandParams.senderComUuid} ${this.sendEmailCommandParams.senderGradidoId}`;
methodLogger.error(errmsg);
throw new Error(errmsg);
}
methodLogger.debug(`find recipient user: ${this.sendEmailCommandParams.receiverComUuid} ${this.sendEmailCommandParams.receiverGradidoId}`)
const recipientUser = await findUserByUuids(this.sendEmailCommandParams.receiverGradidoId, this.sendEmailCommandParams.receiverComUuid);
methodLogger.debug(`recipientUser=${JSON.stringify(recipientUser)}`)
if (!recipientUser) {
const errmsg = `Recipient user not found: ${this.sendEmailCommandParams.receiverComUuid} ${this.sendEmailCommandParams.receiverGradidoId}`;
methodLogger.error(errmsg);
throw new Error(errmsg);
}
const emailParams = {
firstName: recipientUser.firstName,
lastName: recipientUser.lastName,
email: recipientUser.emailContact.email,
language: recipientUser.language,
senderFirstName: senderUser.firstName,
senderLastName: senderUser.lastName,
senderEmail: senderUser.emailId !== null ? senderUser.emailContact.email : null,
memo: this.sendEmailCommandParams.memo || '',
transactionAmount: new Decimal(this.sendEmailCommandParams.amount || 0).abs(),
};
methodLogger.debug(`emailParams=${JSON.stringify(emailParams)}`)
switch(this.sendEmailCommandParams.mailType) {
case 'sendTransactionReceivedEmail':
result = await sendTransactionReceivedEmail(emailParams);
break;
default:
throw new Error(`Unknown mail type: ${this.sendEmailCommandParams.mailType}`);
}
try {
// Example: const result = await emailService.sendEmail(this.params);
return result;
} catch (error) {
methodLogger.error('Error executing SendEmailCommand:', error);
throw error;
}
}
}