import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, } from "typeorm"; import { Partner } from ".."; @Entity({ comment: "Tabla para almacenar modificaciones pendientes que se ejecutarán en un momento específico o cuando se cumpla una condición.", name: "pending_modification", }) export class PendingModification { @PrimaryGeneratedColumn({ type: "int", comment: "ID único de cada registro.", }) id: number; @Column({ length: 100, type: "varchar", comment: "Nombre de la entidad afectada (ej: local, company, product).", }) entity_name: string; @Column({ type: "int", comment: "ID del registro de la entidad que será modificado.", }) entity_id: number; @Column({ type: "datetime", nullable: true, default: null, comment: "Fecha y hora programada para ejecutar el cambio (solo aplica si execute_condition = 2).", }) execute: Date | null; @Column({ type: "int", comment: "Columna creada para saber cuándo se ejecuta el cambio:\n1: Al cerrar (cuando el local deje de estar en operación).\n2: En el momento programado (cuando se cumpla la fecha/hora de la columna execute).", }) execute_condition: number; @Column({ type: "json", comment: "Objeto JSON con los campos y valores que se aplicarán como modificación.", }) payload: any; @Column({ default: 1, type: "int", width: 1, comment: "Estado en el que se encuentra la modificación pendiente.\n1: Pendiente: Aún no se ejecuta la modificación.\n2: Ejecutado: Ya se ejecutó la modificación pendiente.\n3: Cancelado: Se canceló la operación pendiente.\n4: Fallado: Falló la operación al intentar ejecutar la operación pendiente.\nEsto debería enviar un correo cuando se ejecute la operación pendiente al que guardó la operación.", }) status: number; @ManyToOne( () => Partner, (partner) => partner.created_by_pending_modifications, { onDelete: "NO ACTION", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "requested_by" }) requested_by: Partner; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP", comment: "Fecha y hora en la que se crea el registro.", }) created: Date; @Column({ type: "datetime", nullable: true, default: null, comment: "Fecha y hora en la que se ejecutó el cambio.", }) updated: Date | null; }