import { Column, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { LocalReserve, LocalTableReservePayment, ReceiptConfig, RequestLocalPayment, UserPaymentMethod, } from ".."; import { City } from "./City"; import { CodeRedemptionHistoryUser } from "./CodeRedemptionHistoryUser"; import { Local } from "./Local"; import { LocalQualification } from "./LocalQualification"; import { Product } from "./Product"; import { Request } from "./Request"; import { RequestProduct } from "./RequestProduct"; import { RequestProductGroupComplement } from "./RequestProductGroupComplement"; import { Square } from "./Square"; import { UserAddress } from "./UserAddress"; @Entity({ comment: "Usuarios registrados en la plataforma." }) export class User { @PrimaryGeneratedColumn({ type: "int", comment: "Número de identificación (ID) único de cada registro.", }) id: number; @Column({ length: 30, type: "varchar", unique: true, comment: "Código único del usuario.", }) code: string; @Column({ length: 14, unique: true, type: "varchar", comment: "Número de documento del usuario.", }) document: string; @Column({ length: 50, type: "varchar", comment: "Nombre del usuario." }) name: string; @Column({ length: 50, type: "varchar", comment: "Apellidos del usuario." }) surname: string; @Column({ length: 60, unique: true, type: "varchar", comment: "Correo electrónico del usuario.", }) email: string; @Column({ length: 12, unique: true, type: "varchar", comment: "Número de celular del usuario.", }) phone: string; @ManyToOne(() => City, (city) => city.users, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }) @JoinColumn({ name: "city" }) city: City; @Column({ length: 255, type: "varchar", comment: "Contraseña almacenada tipo SHA256 del usuario.", }) password: string; @Column({ type: "json", nullable: true, default: null, comment: "Campo de tipo JSON donde se guarda información necesaria para el registro.", }) profile: any | null; @Column({ type: "datetime", comment: "Fecha de creación del registro.", default: () => "CURRENT_TIMESTAMP", }) created: Date; @Column({ type: "datetime", comment: "Fecha de actualización del registro.", default: () => "CURRENT_TIMESTAMP", onUpdate: "CURRENT_TIMESTAMP", }) updated: Date; @Column({ type: "int", width: 1, default: 1, comment: "¿El usuario tiene acceso a la plataforma?:\r\n1. Activo: El usuario tiene acceso.\r\n0. Inactivo: El usuario no tiene acceso a la plataforma.", }) status: number; @Column({ type: "int", width: 1, default: 1, comment: "Es el estado para verificar si se envía en la papelera o no.", }) visible: number; @OneToMany( () => CodeRedemptionHistoryUser, (codeRedemptionHistoryUser) => codeRedemptionHistoryUser.user, ) code_redemption_history_users: CodeRedemptionHistoryUser[]; @OneToMany( () => LocalQualification, (localQualification) => localQualification.user, ) qualifications: LocalQualification[]; @OneToMany(() => Request, (request) => request.user) requests: Request[]; @ManyToMany(() => Request, (request) => request.requests_group) @JoinTable({ name: "request_group", joinColumn: { name: "user", referencedColumnName: "id", }, inverseJoinColumn: { name: "request", referencedColumnName: "id", }, }) requests_group: Request[]; @OneToMany(() => RequestProduct, (requestProduct) => requestProduct.user) request_products: RequestProduct[]; @OneToMany( () => RequestProductGroupComplement, (requestProduct) => requestProduct.user, ) request_product_group_complements: RequestProductGroupComplement[]; @OneToMany(() => UserAddress, (userAddress) => userAddress.user) addresses: UserAddress[]; @OneToMany( () => UserPaymentMethod, (userPaymentMethods) => userPaymentMethods.user, ) payment_methods: UserPaymentMethod[]; @OneToMany( () => RequestLocalPayment, (requestLocalPayment) => requestLocalPayment.user, ) payments_made: RequestLocalPayment[]; @ManyToMany(() => Square, (square) => square.users_favorite_square) @JoinTable({ name: "user_favorite_square", joinColumn: { name: "user", referencedColumnName: "id", }, inverseJoinColumn: { name: "square", referencedColumnName: "id", }, }) user_favorite_squares: Square[]; @ManyToMany(() => Local, (local) => local.users_favorite_local) @JoinTable({ name: "user_favorite_local", joinColumn: { name: "user", referencedColumnName: "id", }, inverseJoinColumn: { name: "local", referencedColumnName: "id", }, }) user_favorite_locals: Local[]; @ManyToMany(() => Product, (product) => product.users_favorite_product) @JoinTable({ name: "user_favorite_product", joinColumn: { name: "user", referencedColumnName: "id", }, inverseJoinColumn: { name: "product", referencedColumnName: "id", }, }) user_favorite_products: Product[]; @OneToMany(() => ReceiptConfig, (receiptConfig) => receiptConfig.updated_by) receipts_user_config: ReceiptConfig[]; @OneToMany(() => LocalReserve, (localReserve) => localReserve.user) local_reserves: LocalReserve[]; @OneToMany( () => LocalTableReservePayment, (localTableReservePayment) => localTableReservePayment.user, ) local_table_reserve_payments: LocalTableReservePayment[]; }