The AOC Framework
github logodiscord logo

BACKEND

Subscribers #

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.

Ejemplo #

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

© 2024 Atlantis of Code. All rights reserved.
All trademarks are the property of their respective owners.