74 lines
1.6 KiB
JavaScript
74 lines
1.6 KiB
JavaScript
const { DataTypes } = require('sequelize');
|
|
const { v4: uuidv4 } = require('uuid');
|
|
|
|
module.exports = (sequelize) => {
|
|
const QuizSessionQuestion = sequelize.define('QuizSessionQuestion', {
|
|
id: {
|
|
type: DataTypes.CHAR(36),
|
|
primaryKey: true,
|
|
allowNull: false
|
|
},
|
|
quizSessionId: {
|
|
type: DataTypes.CHAR(36),
|
|
allowNull: false,
|
|
field: 'quiz_session_id'
|
|
},
|
|
questionId: {
|
|
type: DataTypes.CHAR(36),
|
|
allowNull: false,
|
|
field: 'question_id'
|
|
},
|
|
questionOrder: {
|
|
type: DataTypes.INTEGER.UNSIGNED,
|
|
allowNull: false,
|
|
field: 'question_order',
|
|
validate: {
|
|
min: 1
|
|
}
|
|
}
|
|
}, {
|
|
tableName: 'quiz_session_questions',
|
|
underscored: true,
|
|
timestamps: true,
|
|
createdAt: 'created_at',
|
|
updatedAt: 'updated_at',
|
|
indexes: [
|
|
{
|
|
fields: ['quiz_session_id']
|
|
},
|
|
{
|
|
fields: ['question_id']
|
|
},
|
|
{
|
|
fields: ['quiz_session_id', 'question_order']
|
|
},
|
|
{
|
|
unique: true,
|
|
fields: ['quiz_session_id', 'question_id']
|
|
}
|
|
],
|
|
hooks: {
|
|
beforeValidate: (quizSessionQuestion) => {
|
|
if (!quizSessionQuestion.id) {
|
|
quizSessionQuestion.id = uuidv4();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
// Define associations
|
|
QuizSessionQuestion.associate = (models) => {
|
|
QuizSessionQuestion.belongsTo(models.QuizSession, {
|
|
foreignKey: 'quizSessionId',
|
|
as: 'quizSession'
|
|
});
|
|
|
|
QuizSessionQuestion.belongsTo(models.Question, {
|
|
foreignKey: 'questionId',
|
|
as: 'question'
|
|
});
|
|
};
|
|
|
|
return QuizSessionQuestion;
|
|
};
|