import { Column, Entity, Index, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { ProductGroup } from "./ProductGroup"; import { Promocode } from "./Promocode"; import { UserSubscription } from "./UserSubscription"; @Index("PK_product", ["id"], { unique: true }) @Index("IX_product_product_group_id", ["productGroupId"], {}) @Entity("product", { schema: "core" }) export class Product { @PrimaryGeneratedColumn({ type: "integer", name: "id" }) id: number; @Column("timestamp without time zone", { name: "created_date" }) createdDate: Date; @Column("integer", { name: "created_by" }) createdBy: number; @Column("timestamp without time zone", { name: "modified_date" }) modifiedDate: Date; @Column("integer", { name: "modified_by" }) modifiedBy: number; @Column("smallint", { name: "state" }) state: number; @Column("character varying", { name: "name", length: 255 }) name: string; @Column("text", { name: "description", nullable: true }) description: string | null; @Column("integer", { name: "length", nullable: true }) length: number | null; @Column("smallint", { name: "os_type" }) osType: number; @Column("smallint", { name: "type" }) type: number; @Column("integer", { name: "product_group_id", nullable: true }) productGroupId: number | null; @Column("text", { name: "duration", nullable: true }) duration: string | null; @ManyToOne(() => ProductGroup, (productGroup) => productGroup.products, { onDelete: "RESTRICT", }) @JoinColumn([{ name: "product_group_id", referencedColumnName: "id" }]) productGroup: ProductGroup; @ManyToMany(() => Promocode, (promocode) => promocode.products) @JoinTable({ name: "product_promocode", joinColumns: [{ name: "product_id", referencedColumnName: "id" }], inverseJoinColumns: [{ name: "promocode_id", referencedColumnName: "id" }], schema: "core", }) promocodes: Promocode[]; @OneToMany( () => UserSubscription, (userSubscription) => userSubscription.product ) userSubscriptions: UserSubscription[]; }