feat: 实现ID生成器并重构模型ID生成逻辑

refactor: 统一ID生成方式,使用新的idGenerator模块
refactor: 重构模型ID生成逻辑,允许空ID并在创建前自动生成
fix(roomSchema): 使机房ID字段变为可选并更新前端表单验证
style: 格式化代码并优化导入语句
test: 添加操作日志集成测试文件
docs: 添加错误处理模块文档
This commit is contained in:
zhang1106
2026-04-02 10:34:13 +08:00
parent ea67951dd4
commit 7f1df28858
28 changed files with 451 additions and 91 deletions
+40 -1
View File
@@ -1,13 +1,45 @@
const { DataTypes } = require('sequelize');
const { sequelize } = require('../db');
async function generateRoomSequenceId() {
const RoomModel = require('./Room');
const prefix = 'ROOM';
const paddingLength = 6;
try {
const latestRoom = await RoomModel.findOne({
attributes: ['roomId'],
where: {
roomId: {
[require('sequelize').Op.like]: `${prefix}%`,
},
},
order: [['roomId', 'DESC']],
});
let nextNumber = 1;
if (latestRoom && latestRoom.roomId) {
const numStr = latestRoom.roomId.replace(prefix, '');
const currentNum = parseInt(numStr, 10);
if (!isNaN(currentNum)) {
nextNumber = currentNum + 1;
}
}
return `${prefix}${nextNumber.toString().padStart(paddingLength, '0')}`;
} catch (error) {
const fallbackId = `${prefix}${Date.now().toString().slice(-6)}`;
return fallbackId;
}
}
const Room = sequelize.define(
'Room',
{
roomId: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
allowNull: true,
unique: true,
},
name: {
@@ -38,6 +70,13 @@ const Room = sequelize.define(
tableName: 'rooms',
timestamps: true,
indexes: [{ fields: ['status'] }, { fields: ['name'] }],
hooks: {
beforeCreate: async (room) => {
if (!room.roomId) {
room.roomId = await generateRoomSequenceId();
}
},
},
}
);