-
Notifications
You must be signed in to change notification settings - Fork 489
/
product-variant.entity.ts
91 lines (80 loc) · 2.14 KB
/
product-variant.entity.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { Base } from '../core/entities/base';
import {
Entity,
Column,
ManyToOne,
OneToOne,
RelationId,
JoinColumn
} from 'typeorm';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import {
ProductVariant as IProductVariant,
BillingInvoicingPolicyEnum
} from '@gauzy/models';
import { ProductVariantPrice } from '../product-variant-price/product-variant-price.entity';
import { ProductOption } from '../product-option/product-option.entity';
import { ProductVariantSettings } from '../product-settings/product-settings.entity';
import { Product } from '../product/product.entity';
import { IsNumber, IsString, IsOptional, IsEnum } from 'class-validator';
@Entity('product_variant')
export class ProductVariant extends Base implements IProductVariant {
@ApiProperty({ type: Number })
@IsNumber()
@Column({ default: 0 })
taxes: number;
@ApiPropertyOptional({ type: String })
@IsString()
@IsOptional()
@Column({ nullable: true })
notes: string;
@ApiProperty({ type: String })
@RelationId((productVariant: ProductVariant) => productVariant.product)
@IsString()
@Column({ nullable: true })
productId: string;
@ApiProperty({ type: Number })
@IsNumber()
@Column({ default: 0 })
quantity: number;
@ApiProperty({ type: String })
@IsEnum(BillingInvoicingPolicyEnum)
@Column({ default: BillingInvoicingPolicyEnum.QUANTITY_ORDERED })
billingInvoicingPolicy: string;
@ApiProperty({ type: String })
@IsString()
@Column()
internalReference: string;
@ApiPropertyOptional({ type: Boolean })
@Column({ default: true })
enabled: boolean;
// @OneToMany(() => ProductOption, productOption => productOption.variant)
options: ProductOption[];
@OneToOne(
() => ProductVariantSettings,
(settings) => settings.productVariant,
{
eager: true,
onDelete: 'CASCADE'
}
)
@JoinColumn()
settings: ProductVariantSettings;
@OneToOne(
() => ProductVariantPrice,
(variantPrice) => variantPrice.productVariant,
{
eager: true,
onDelete: 'CASCADE'
}
)
@JoinColumn()
price: ProductVariantPrice;
@ManyToOne(
() => Product,
(product) => product.variants,
{ onDelete: 'CASCADE' }
)
@JoinColumn()
product: Product;
}