@crdsyntax/nest-event
v1.2.0
Published
generate event emitter for nestjs typeorm mariadb
Readme
🛠️ Script: generate-event.js
Este script genera automáticamente archivos de eventos y listeners en un módulo de NestJS, a partir de la definición de una entidad (.entity.ts).
Está orientado a proyectos que usan NestJS + TypeORM + EventEmitter, donde se desea estandarizar la creación de eventos (event) y listeners (listener) asociados a una entidad específica dentro de un módulo.
🚀 ¿Qué hace?
Crea carpetas
event/ylistener/dentro del módulo si no existen.Lee la entidad ubicada en: src//entities/.entity.ts
Extrae las propiedades de la entidad (
@Column,@PrimaryGeneratedColumn) para incluirlas en la claseCreate<Entity>Event.Genera automáticamente:
- Un archivo de eventos en
event/<entidad>.event.ts - Un archivo de listener en
listener/<entidad>.listener.ts
📦 Archivos generados
Ejemplo: user
event/user.event.ts
export const USER_EVENTS = {
SINGLE_CREATE: "user:single.create",
BATCH_CREATE: "user:batch.create",
} as const;
export type UserEventType = (typeof USER_EVENTS)[keyof typeof USER_EVENTS];
export class CreateUserEvent {
constructor(
public readonly id: number,
public readonly name: string
) // ...otros campos de la entidad
{}
}
@Injectable()
export class UserListener {
private readonly logger = new Logger(User.name);
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>
) {}
@OnEvent(USER_EVENTS.SINGLE_CREATE)
async handleSingleCreateEvent(event: CreateUserEvent) {
const entity = this.userRepository.create(event);
await this.userRepository.save(entity);
this.logger.log("🔔 Single create event procesado:", entity);
}
@OnEvent(USER_EVENTS.BATCH_CREATE)
async handleBatchCreateEvent(events: CreateUserEvent[]) {
for (const event of events) {
const entity = this.userRepository.create(event);
await this.userRepository.save(entity);
this.logger.log("🔔 Batch create event procesado:", entity);
}
}
}⚡ Uso:
node scripts/generate-event.js [entidad]
Argumentos:
(obligatorio) → nombre del módulo en src/
[entidad] (opcional) → nombre específico de la entidad dentro del módulo.
Si no se especifica, se toma el mismo nombre que el módulo.
Ejemplos:
Usar el módulo como entidad:
node scripts/generate-event.js booking
Busca: src/booking/entities/booking.entity.ts
Usar una entidad distinta dentro del módulo:
node scripts/generate-event.js booking booking-product
REQUISITOS DE ESTRUCTURA:
src/ / entities/ .entity.tsn
