mirror of
https://github.com/IT4Change/gradido.git
synced 2026-03-01 12:44:43 +00:00
95 lines
3.9 KiB
TypeScript
95 lines
3.9 KiB
TypeScript
import { BaseCommand } from '../BaseCommand';
|
|
import { sendTransactionReceivedEmail } from '../../emails/sendEmailVariants';
|
|
import { findForeignUserByUuids, findUserByIdentifier } 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<{ success: boolean }> {
|
|
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<{ success: boolean }> {
|
|
const methodLogger = createLogger(`execute`)
|
|
methodLogger.debug(`execute() sendEmailCommandParams=${JSON.stringify(this.sendEmailCommandParams)}`)
|
|
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 findForeignUserByUuids(this.sendEmailCommandParams.senderComUuid, this.sendEmailCommandParams.senderGradidoId);
|
|
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 findUserByIdentifier(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':
|
|
await sendTransactionReceivedEmail(emailParams);
|
|
break;
|
|
default:
|
|
throw new Error(`Unknown mail type: ${this.sendEmailCommandParams.mailType}`);
|
|
}
|
|
|
|
try {
|
|
// Example: const result = await emailService.sendEmail(this.params);
|
|
return { success: true };
|
|
} catch (error) {
|
|
methodLogger.error('Error executing SendEmailCommand:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
} |