coffee-core
Version:
Coffee IT API core library
33 lines (27 loc) • 1.15 kB
text/typescript
import { ClassConstructor, plainToClass } from 'class-transformer';
import { Logger, LoggerService } from '@nestjs/common';
import { ValidationMiddleware } from './validation/validation-middleware';
export class ConsumeHandler {
private validationMiddleware: ValidationMiddleware;
private readonly logger: LoggerService = new Logger(ConsumeHandler.name);
constructor(
public readonly bindingKey: string,
private onConsume: (message: any) => Promise<void>,
private messageClass: ClassConstructor<any>,
private enableLogging = true,
) {
}
public async consume(message: any): Promise<void> {
const transformedMessage = await plainToClass(this.messageClass, message);
if (this.validationMiddleware) {
await this.validationMiddleware.handle(transformedMessage, this.bindingKey);
}
if (this.enableLogging) {
this.logger.debug(`Got an event on ${this.bindingKey} with payload: ${JSON.stringify(message, null, 2)}`);
}
await this.onConsume(transformedMessage);
}
public setValidationMiddleware(middleware: ValidationMiddleware): void {
this.validationMiddleware = middleware;
}
}