product-review.entity.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {
  2. Customer,
  3. DeepPartial,
  4. HasCustomFields,
  5. LocaleString,
  6. Product,
  7. ProductVariant,
  8. Translatable,
  9. Translation,
  10. VendureEntity,
  11. } from '@vendure/core';
  12. import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
  13. import { ReviewState } from '../types';
  14. import { ProductReviewTranslation } from './product-review-translation.entity';
  15. export class CustomReviewFields {}
  16. @Entity()
  17. export class ProductReview extends VendureEntity implements Translatable, HasCustomFields {
  18. constructor(input?: DeepPartial<ProductReview>) {
  19. super(input);
  20. }
  21. @ManyToOne(type => Product)
  22. product: Product;
  23. text: LocaleString;
  24. @ManyToOne(type => ProductVariant)
  25. productVariant: ProductVariant | null;
  26. @Column()
  27. summary: string;
  28. @Column('text')
  29. body: string;
  30. @Column()
  31. rating: number;
  32. @ManyToOne(type => Customer)
  33. author: Customer;
  34. @Column()
  35. authorName: string;
  36. @Column({ nullable: true })
  37. authorLocation: string;
  38. @Column({ default: 0 })
  39. upvotes: number;
  40. @Column({ default: 0 })
  41. downvotes: number;
  42. @Column('varchar')
  43. state: ReviewState;
  44. @Column('text', { nullable: true, default: null })
  45. response: string;
  46. @Column({ nullable: true, default: null })
  47. responseCreatedAt: Date;
  48. @OneToMany(() => ProductReviewTranslation, translation => translation.base, { eager: true })
  49. translations: Array<Translation<ProductReview>>;
  50. @Column(type => CustomReviewFields)
  51. customFields: CustomReviewFields;
  52. }