file.entity.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from 'typeorm';
  2. import { UserEntity } from '@/server/modules/users/user.entity';
  3. import process from 'node:process';
  4. @Entity('file')
  5. export class File {
  6. @PrimaryGeneratedColumn({ name: 'id', type: 'int', unsigned: true })
  7. id!: number;
  8. @Column({ name: 'name', type: 'varchar', length: 255 })
  9. name!: string;
  10. @Column({ name: 'type', type: 'varchar', length: 50, nullable: true, comment: '文件类型' })
  11. type!: string | null;
  12. @Column({ name: 'size', type: 'int', unsigned: true, nullable: true, comment: '文件大小,单位字节' })
  13. size!: number | null;
  14. @Column({ name: 'path', type: 'varchar', length: 512, comment: '文件存储路径' })
  15. path!: string;
  16. // 获取完整的文件URL(包含MINIO_HOST前缀)
  17. get fullUrl(): string {
  18. const protocol = process.env.MINIO_USE_SSL !== 'false' ? 'https' : 'http';
  19. const port = process.env.MINIO_PORT ? `:${process.env.MINIO_PORT}` : '';
  20. const host = process.env.MINIO_HOST || 'localhost';
  21. const bucketName = process.env.MINIO_BUCKET_NAME || 'd8dai';
  22. return `${protocol}://${host}${port}/${bucketName}/${this.path}`;
  23. }
  24. @Column({ name: 'description', type: 'text', nullable: true, comment: '文件描述' })
  25. description!: string | null;
  26. @Column({ name: 'upload_user_id', type: 'int', unsigned: true })
  27. uploadUserId!: number;
  28. @ManyToOne(() => UserEntity)
  29. @JoinColumn({ name: 'upload_user_id', referencedColumnName: 'id' })
  30. uploadUser!: UserEntity;
  31. @Column({ name: 'upload_time', type: 'datetime' })
  32. uploadTime!: Date;
  33. @Column({ name: 'last_updated', type: 'datetime', nullable: true, comment: '最后更新时间' })
  34. lastUpdated!: Date | null;
  35. @Column({ name: 'created_at', type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
  36. createdAt!: Date;
  37. @Column({
  38. name: 'updated_at',
  39. type: 'timestamp',
  40. default: () => 'CURRENT_TIMESTAMP',
  41. onUpdate: 'CURRENT_TIMESTAMP'
  42. })
  43. updatedAt!: Date;
  44. }