001_createUsersTable.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import type { MigrationLiveDefinition } from '@d8d-appcontainer/types'
  2. import { DeleteStatus } from '../../client/share/types.ts'
  3. const createUsersTable: MigrationLiveDefinition = {
  4. name: "create_users_table",
  5. up: async (api) => {
  6. await api.schema.createTable('users', (table) => {
  7. table.increments('id').primary();
  8. table.string('username').unique().notNullable();
  9. table.string('password').notNullable();
  10. table.string('phone').unique();
  11. table.string('email').unique();
  12. table.string('nickname');
  13. table.string('name');
  14. table.integer('is_disabled').defaultTo(DeleteStatus.NOT_DELETED);
  15. table.integer('is_deleted').defaultTo(DeleteStatus.NOT_DELETED);
  16. // 用户角色: teacher(教师)/admin(管理员)/student(学生)/fan(粉丝)
  17. table.enum('role', ['teacher', 'admin', 'student', 'fan']).notNullable().defaultTo('student');
  18. // 账户有效期,为空表示永久有效
  19. table.timestamp('valid_until').nullable();
  20. table.timestamps(true, true);
  21. // 添加索引
  22. table.index('username');
  23. table.index('is_disabled');
  24. table.index('is_deleted');
  25. });
  26. },
  27. down: async (api) => {
  28. await api.schema.dropTable('users');
  29. }
  30. }
  31. export default createUsersTable;