47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
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;
|
|
}
|