Comment.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import {
  2. Entity,
  3. PrimaryGeneratedColumn,
  4. Column,
  5. CreateDateColumn,
  6. ManyToOne,
  7. JoinColumn,
  8. Index,
  9. } from 'typeorm';
  10. import type { PlatformType } from '@media-manager/shared';
  11. import { User } from './User.js';
  12. import { PlatformAccount } from './PlatformAccount.js';
  13. import { Work } from './Work.js';
  14. @Entity('comments')
  15. @Index(['userId', 'workId'])
  16. export class Comment {
  17. @PrimaryGeneratedColumn()
  18. id!: number;
  19. @Column({ type: 'int', name: 'user_id' })
  20. userId!: number;
  21. @Column({ type: 'int', name: 'account_id' })
  22. accountId!: number;
  23. @Column({ type: 'int', name: 'work_id', nullable: true })
  24. workId!: number | null;
  25. @Column({ type: 'varchar', length: 50, nullable: true })
  26. platform!: PlatformType | null;
  27. @Column({ type: 'varchar', length: 100, nullable: true, name: 'video_id' })
  28. videoId!: string | null;
  29. @Column({ type: 'varchar', length: 500, nullable: true, name: 'platform_video_url' })
  30. platformVideoUrl!: string | null;
  31. @Column({ type: 'varchar', length: 100, unique: true, name: 'comment_id' })
  32. commentId!: string;
  33. @Column({ type: 'varchar', length: 100, nullable: true, name: 'parent_comment_id' })
  34. parentCommentId!: string | null;
  35. @Column({ type: 'varchar', length: 100, nullable: true, name: 'author_id' })
  36. authorId!: string | null;
  37. @Column({ type: 'varchar', length: 100, nullable: true, name: 'author_name' })
  38. authorName!: string | null;
  39. @Column({ type: 'varchar', length: 500, nullable: true, name: 'author_avatar' })
  40. authorAvatar!: string | null;
  41. @Column({ type: 'text', nullable: true })
  42. content!: string | null;
  43. @Column({ type: 'int', default: 0, name: 'like_count' })
  44. likeCount!: number;
  45. @Column({ type: 'text', nullable: true, name: 'reply_content' })
  46. replyContent!: string | null;
  47. @Column({ type: 'timestamp', nullable: true, name: 'replied_at' })
  48. repliedAt!: Date | null;
  49. @Column({ type: 'boolean', default: false, name: 'is_read' })
  50. isRead!: boolean;
  51. @Column({ type: 'boolean', default: false, name: 'is_top' })
  52. isTop!: boolean;
  53. @Column({ type: 'timestamp', nullable: true, name: 'comment_time' })
  54. commentTime!: Date | null;
  55. @CreateDateColumn({ name: 'created_at' })
  56. createdAt!: Date;
  57. // 关联
  58. @ManyToOne(() => User, (user) => user.comments, { onDelete: 'CASCADE' })
  59. @JoinColumn({ name: 'user_id' })
  60. user!: User;
  61. @ManyToOne(() => PlatformAccount, (account) => account.comments, { onDelete: 'CASCADE' })
  62. @JoinColumn({ name: 'account_id' })
  63. account!: PlatformAccount;
  64. @ManyToOne(() => Work, { onDelete: 'SET NULL', nullable: true })
  65. @JoinColumn({ name: 'work_id' })
  66. work?: Work;
  67. }