005_createFileLibraryTable.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import type { MigrationLiveDefinition } from '@d8d-appcontainer/types'
  2. import { EnableStatus, DeleteStatus } from '../../client/share/types.ts'
  3. const createFileLibraryTable: MigrationLiveDefinition = {
  4. name: "create_file_library_table",
  5. up: async (api) => {
  6. await api.schema.createTable('file_library', (table) => {
  7. table.increments('id').primary();
  8. table.string('file_name').notNullable().comment('文件名称');
  9. table.string('original_filename').comment('原始文件名');
  10. table.string('file_path').notNullable().comment('文件路径');
  11. table.string('file_type').comment('文件类型');
  12. table.integer('file_size').unsigned().comment('文件大小(字节)');
  13. table.integer('uploader_id').unsigned().references('id').inTable('users').onDelete('SET NULL').comment('上传用户ID');
  14. table.string('uploader_name').comment('上传者名称');
  15. table.integer('category_id').unsigned().references('id').inTable('file_categories').onDelete('SET NULL').comment('文件分类');
  16. table.string('tags').comment('文件标签');
  17. table.text('description').comment('文件描述');
  18. table.integer('download_count').defaultTo(0).comment('下载次数');
  19. table.integer('is_disabled').defaultTo(EnableStatus.DISABLED).comment('是否禁用 (0否 1是)');
  20. table.integer('is_deleted').defaultTo(DeleteStatus.NOT_DELETED).comment('是否被删除 (0否 1是)');
  21. table.timestamps(true, true);
  22. // 添加索引
  23. table.index('file_name');
  24. table.index('file_type');
  25. table.index('category_id');
  26. table.index('uploader_id');
  27. table.index('is_deleted');
  28. });
  29. },
  30. down: async (api) => {
  31. await api.schema.dropTable('file_library');
  32. }
  33. }
  34. export default createFileLibraryTable;