Files
competition-website/database/migrations/001-create-contestants.js
WorkBuddy a303cf2d53 chore: 后端首次基线提交
运行必须源码:app/(controller/model/service/middleware/lib/utils/validate/router)、config/、database/(migrations/seeders/sql)、启动脚本、app/public/templates 模板。
已忽略运行非必须:node_modules/、logs/、run/、app/public 运行时上传数据、.env*、构建/缓存产物。
2026-08-17 12:25:42 +08:00

105 lines
2.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
/**
* 迁移文件:创建选手表(contestants)
* 包含选手基本信息、身份认证、组别和成绩字段
*/
module.exports = {
/**
* 执行迁移:创建 contestants 表
* @param {import('sequelize').QueryInterface} queryInterface
* @param {import('sequelize').Sequelize} Sequelize
*/
up: async (queryInterface, Sequelize) => {
const { INTEGER, STRING, BOOLEAN, DATE } = Sequelize;
await queryInterface.createTable('contestants', {
// 主键 ID,自增
id: {
type: INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
comment: '选手唯一标识',
},
// 身份证号,唯一,18位
id_number: {
type: STRING(18),
allowNull: false,
unique: true,
comment: '身份证号',
},
// 选手姓名
name: {
type: STRING(50),
allowNull: false,
comment: '选手姓名',
},
// 手机号码
phone: {
type: STRING(20),
allowNull: false,
comment: '手机号码',
},
// 参赛组别
group: {
type: STRING(20),
allowNull: false,
comment: '参赛组别(zhongzhi/gaozhi/benke/jiaoshi)',
},
// 登录密码
password: {
type: STRING(100),
allowNull: false,
defaultValue: '',
comment: '登录密码',
},
// 账号激活状态
activated: {
type: BOOLEAN,
allowNull: false,
defaultValue: false,
comment: '账号激活状态',
},
// 总分
score: {
type: INTEGER,
allowNull: true,
defaultValue: null,
comment: '选手总分',
},
// 创建时间
created_at: {
type: DATE,
allowNull: false,
comment: '创建时间',
},
// 更新时间
updated_at: {
type: DATE,
allowNull: false,
comment: '更新时间',
},
});
// 为 id_number 创建唯一索引
await queryInterface.addIndex('contestants', ['id_number'], {
unique: true,
name: 'idx_contestants_id_number',
});
// 为 group 创建索引
await queryInterface.addIndex('contestants', ['group'], {
name: 'idx_contestants_group',
});
},
/**
* 回滚迁移:删除 contestants 表
* @param {import('sequelize').QueryInterface} queryInterface
*/
down: async (queryInterface) => {
await queryInterface.dropTable('contestants');
},
};