Los event subscribers son clases decoradas que se registran automáticamente y le permiten realizar operaciones durante el ciclo de vida de las entidades. Por favor lea la documentación en la web de mikro-orm para más información.
En este ejemplo asignamos un número incremetal al código de los clientes cuando los creamos o los actualizamos:
@Subscriber()
export class CustomerSubscriber implements EventSubscriber<Customer> {
getSubscribedEntities(): EntityName<Customer>[] {
return [ Customer ];
}
async beforeCreate(args: EventArgs<Customer>): Promise<void> {
const customer = args.entity;
if (!customer.code) {
await this.assignCodeToCustomer(customer, args.em);
}
}
async beforeUpdate(args: EventArgs<Customer>): Promise<void> {
const customer = args.entity;
if (!customer.code) {
await this.assignCodeToCustomer(customer, args.em);
}
}
private async assignCodeToCustomer(customer: Customer, em: EntityManager) {
const where: FilterQuery<Customer> = { code: { $ne: null }};
if (customer.id) {
where.id = { $ne: customer.id };
}
const latestCustomer = await em.findOne(Customer, where, { orderBy: { code: 'desc' }});
let newCode = 1;
if (latestCustomer) {
newCode = latestCustomer.code + 1;
}
customer.code = newCode;
}
}
Ejemplo completo en quest-server/src/subscribers/customers/customer.subscriber.ts
Por favor, busque en Issues y Discussions en Github para más información