import { Entity, Index, ManyToOne, Property, Unique, Enum } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Food } from '../../foods/entities/food.entity'; import { User } from '../../users/entities/user.entity'; import { Admin } from '../../admin/entities/admin.entity'; import { PositivePoint, NegativePoint } from '../enums/review-point.enum'; import { ReviewStatus } from '../enums/review-status.enum'; @Entity({ tableName: 'reviews' }) @Unique({ properties: ['food', 'user'] }) @Index({ properties: ['food', 'status'] }) @Index({ properties: ['user'] }) @Index({ properties: ['parent'] }) @Index({ properties: ['admin'] }) export class Review extends BaseEntity { @Property({ type: 'boolean' }) isBuyer: boolean = false @ManyToOne(() => Food) food: Food; @ManyToOne(() => User, { nullable: true }) user?: User; @Property({ type: 'text', nullable: true }) comment?: string; @Property({ type: 'int', nullable: false }) rating: number = 0; @Property({ type: 'json', nullable: true }) positivePoints?: PositivePoint[]; @Property({ type: 'json', nullable: true }) negativePoints?: NegativePoint[]; @Enum(() => ReviewStatus) @Property({ type: 'string', default: ReviewStatus.PENDING }) status: ReviewStatus = ReviewStatus.PENDING; @ManyToOne(() => Review, { nullable: true }) parent?: Review; @ManyToOne(() => Admin, { nullable: true }) admin?: Admin; }