import { Column, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique, } from "typeorm"; import { Local, LocalReserve, LocalTableZone, Partner, RequestLocalTable, } from ".."; @Entity({ comment: "Mesas qué se encuentran en el local.", name: "local_table", }) @Unique("uq_zone_number", ["zone", "number"]) export class LocalTable { @PrimaryGeneratedColumn({ type: "int", comment: "Id único de cada registro.", }) id: number; @Column({ length: 10, type: "varchar", unique: true, comment: "Código único de cada mesa.", }) code: string; @ManyToOne(() => Local, (local) => local.local_tables, { onDelete: "CASCADE", onUpdate: "NO ACTION", }) @JoinColumn({ name: "local" }) local: Local; @Column({ type: "varchar", length: 40, comment: "Nombre de la mesa.", }) name: string; @Column({ type: "int", comment: "Capacidad de personas en la mesa.", }) capacity: number; @Column({ type: "int", comment: "Fila donde se encuentra la mesa. ", }) row: number; @Column({ type: "int", comment: "Columna donde se encuentra la mesa.", }) column: number; @Column({ type: "int", default: 1, width: 1, comment: "Columna para saber qué tipo de mesa es:\r\n1: Cuadrada.\r\n2: Redonda.", }) type: number; @ManyToOne( () => LocalTableZone, (localTableZone) => localTableZone.local_tables, { onDelete: "CASCADE", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "zone" }) zone: LocalTableZone; @Column({ type: "varchar", length: 600, nullable: true, default: null, comment: "Detalle adicional de la mesa.", }) description: string | null; @Column({ type: "int", comment: "Número consecutivo de cada mesa.", }) number: number; @Column({ type: "datetime", comment: "Fecha creación del registro.", default: () => "CURRENT_TIMESTAMP", }) created: Date; @Column({ type: "datetime", nullable: true, default: null, comment: "Fecha de actualización del registro.", onUpdate: "CURRENT_TIMESTAMP", }) updated: Date | null; @ManyToOne(() => Partner, (partner) => partner.local_tables, { onDelete: "SET NULL", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "updated_by" }) updated_by: Partner | null; @Column({ default: 1, type: "int", width: 1, comment: "Columna para saber sí la mesa está:\r\n1: Disponible.\r\n2: No disponible.", }) availability: number; @Column({ default: 1, type: "int", width: 1, comment: "Estado del registro:\r\n0: Inactivo.\r\n1: Activo.", }) status: number; @ManyToMany( () => LocalReserve, (localReserve) => localReserve.local_tables_reserves, ) @JoinTable({ name: "local_table_reserve", joinColumn: { name: "local_table", referencedColumnName: "id", }, inverseJoinColumn: { name: "local_reserve", referencedColumnName: "id", }, }) local_tables_reserves: LocalReserve[]; @OneToMany( () => RequestLocalTable, (requestLocalTable) => requestLocalTable.local_table, ) request_local_tables: RequestLocalTable[]; }