feat: table migration to database function

This commit is contained in:
elangptra 2024-10-14 15:35:26 +07:00
parent f4a3e6d02d
commit 48c2634c62
24 changed files with 885 additions and 32 deletions

View File

@ -318,7 +318,6 @@ export const monitoringStudentProgressById = async (req, res) => {
const topicName = stdLearning.level.levelTopic.NAME_TOPIC; const topicName = stdLearning.level.levelTopic.NAME_TOPIC;
const sectionName = stdLearning.level.levelTopic.topicSection.NAME_SECTION; const sectionName = stdLearning.level.levelTopic.topicSection.NAME_SECTION;
// Fetch levels with pagination, search, and sort
const levels = await models.StdLearning.findAndCountAll({ const levels = await models.StdLearning.findAndCountAll({
where: { where: {
ID: userID, ID: userID,
@ -333,16 +332,17 @@ export const monitoringStudentProgressById = async (req, res) => {
{ {
FEEDBACK_STUDENT: { [models.Op.like]: `%${search}%` }, FEEDBACK_STUDENT: { [models.Op.like]: `%${search}%` },
}, },
// { // Search student_start dan student_finish belum bisa
// [models.Sequelize.fn('DATE_FORMAT', models.Sequelize.col('STUDENT_START'), '%Y-%m-%d')]: { {
// [models.Op.like]: `%${search}%`, [models.Sequelize.fn('DATE_FORMAT', models.Sequelize.col('STUDENT_START'), '%Y-%m-%d')]: {
// }, [models.Op.like]: `%${search}%`,
// }, },
// { },
// [models.Sequelize.fn('DATE_FORMAT', models.Sequelize.col('STUDENT_FINISH'), '%Y-%m-%d')]: { {
// [models.Op.like]: `%${search}%`, [models.Sequelize.fn('DATE_FORMAT', models.Sequelize.col('STUDENT_FINISH'), '%Y-%m-%d')]: {
// }, [models.Op.like]: `%${search}%`,
// }, },
},
], ],
}), }),
}, },
@ -388,7 +388,6 @@ export const monitoringStudentProgressById = async (req, res) => {
return 0; return 0;
}); });
// Pagination logic
const paginatedResult = levelArray.slice((page - 1) * limit, page * limit); const paginatedResult = levelArray.slice((page - 1) * limit, page * limit);
const totalPages = Math.ceil(levels.count / limit); const totalPages = Math.ceil(levels.count / limit);
const currentPage = parseInt(page); const currentPage = parseInt(page);

View File

@ -0,0 +1,44 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("teacher", {
ID_GURU: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID: {
type: Sequelize.UUID,
allowNull: false,
},
NIP: {
type: Sequelize.BIGINT(11),
allowNull: false,
},
});
await queryInterface.addConstraint("teacher", {
fields: ["NIP"],
type: "unique",
name: "teacher_unique_nip",
});
await queryInterface.addConstraint("teacher", {
fields: ["ID"],
type: "foreign key",
name: "FK_MERANGKAP",
references: {
table: "users",
field: "ID",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("teacher");
},
};

View File

@ -0,0 +1,43 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("report", {
ID_REPORT: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID: {
type: Sequelize.UUID,
allowNull: false,
},
REPORTS: {
type: Sequelize.STRING(256),
allowNull: false,
},
TIME_REPORT: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("report", {
fields: ["ID"],
type: "foreign key",
name: "FK_MELAPORKAN",
references: {
table: "users",
field: "ID",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("report");
},
};

View File

@ -0,0 +1,31 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("class", {
ID_CLASS: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
NAME_CLASS: {
type: Sequelize.STRING(100),
allowNull: false,
},
TOTAL_STUDENT: {
type: Sequelize.INTEGER(11),
allowNull: true,
},
TIME_CLASS: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
},
async down(queryInterface) {
await queryInterface.dropTable("class");
},
};

View File

@ -0,0 +1,60 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("student", {
ID_SISWA: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_CLASS: {
type: Sequelize.UUID,
allowNull: true,
},
ID: {
type: Sequelize.UUID,
allowNull: false,
},
NISN: {
type: Sequelize.BIGINT(11),
allowNull: false,
},
});
await queryInterface.addConstraint("student", {
fields: ["NISN"],
type: "unique",
name: "student_unique_nisn",
});
await queryInterface.addConstraint("student", {
fields: ["ID_CLASS"],
type: "foreign key",
name: "FK_MENAMPUNG",
references: {
table: "class",
field: "ID_CLASS",
},
onUpdate: "CASCADE",
onDelete: "SET NULL",
});
await queryInterface.addConstraint("student", {
fields: ["ID"],
type: "foreign key",
name: "FK_MENJADI",
references: {
table: "users",
field: "ID",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("student");
},
};

View File

@ -0,0 +1,40 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("section", {
ID_SECTION: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
NAME_SECTION: {
type: Sequelize.STRING(100),
allowNull: false,
},
DESCRIPTION_SECTION: {
type: Sequelize.STRING(1024),
allowNull: true,
},
THUMBNAIL: {
type: Sequelize.STRING(255),
allowNull: true,
},
IS_DELETED: {
type: Sequelize.TINYINT(1),
allowNull: true,
defaultValue: 0,
},
TIME_SECTION: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
},
async down(queryInterface) {
await queryInterface.dropTable("section");
},
};

View File

@ -0,0 +1,52 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("topic", {
ID_TOPIC: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_SECTION: {
type: Sequelize.UUID,
allowNull: false,
},
NAME_TOPIC: {
type: Sequelize.STRING(100),
allowNull: false,
},
DESCRIPTION_TOPIC: {
type: Sequelize.STRING(1024),
allowNull: true,
},
IS_DELETED: {
type: Sequelize.TINYINT(1),
allowNull: true,
defaultValue: 0,
},
TIME_TOPIC: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("topic", {
fields: ["ID_SECTION"],
type: "foreign key",
name: "FK_MEMILIKI",
references: {
table: "section",
field: "ID_SECTION",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("topic");
},
};

View File

@ -0,0 +1,115 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("level", {
ID_LEVEL: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_TOPIC: {
type: Sequelize.UUID,
allowNull: false,
},
ID_SECTION: {
type: Sequelize.UUID,
allowNull: false,
},
NAME_LEVEL: {
type: Sequelize.STRING(100),
allowNull: false,
},
CONTENT: {
type: Sequelize.STRING(1024),
allowNull: true,
},
AUDIO: {
type: Sequelize.STRING(1024),
allowNull: true,
},
IMAGE: {
type: Sequelize.STRING(1024),
allowNull: true,
},
VIDEO: {
type: Sequelize.STRING(1024),
allowNull: true,
},
IS_PRETEST: {
type: Sequelize.TINYINT(1),
allowNull: true,
defaultValue: 0,
},
ROUTE_1: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
ROUTE_2: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
ROUTE_3: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
ROUTE_4: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
ROUTE_5: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
ROUTE_6: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: 0,
},
IS_DELETED: {
type: Sequelize.TINYINT(1),
allowNull: true,
defaultValue: 0,
},
TIME_LEVEL: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("level", {
fields: ["ID_TOPIC"],
type: "foreign key",
name: "FK_BERHUBUNGAN",
references: {
table: "topic",
field: "ID_TOPIC",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
await queryInterface.addConstraint("level", {
fields: ["ID_SECTION"],
type: "foreign key",
name: "FK_MEMPUNYAI",
references: {
table: "section",
field: "ID_SECTION",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("level");
},
};

View File

@ -0,0 +1,73 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("admin_exercise", {
ID_ADMIN_EXERCISE: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_LEVEL: {
type: Sequelize.UUID,
allowNull: false,
},
TITLE: {
type: Sequelize.STRING(100),
allowNull: false,
},
QUESTION: {
type: Sequelize.TEXT,
allowNull: false,
},
SCORE_WEIGHT: {
type: Sequelize.INTEGER(11),
allowNull: false,
defaultValue: 1,
},
QUESTION_TYPE: {
type: Sequelize.STRING(100),
allowNull: false,
},
AUDIO: {
type: Sequelize.STRING(1024),
allowNull: true,
},
VIDEO: {
type: Sequelize.STRING(1024),
allowNull: true,
},
IMAGE: {
type: Sequelize.STRING(1024),
allowNull: true,
},
IS_DELETED: {
type: Sequelize.TINYINT(1),
allowNull: true,
defaultValue: 0,
},
TIME_ADMIN_EXC: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("admin_exercise", {
fields: ["ID_LEVEL"],
type: "foreign key",
name: "FK_MEMBUTUHKAN",
references: {
table: "level",
field: "ID_LEVEL",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("admin_exercise");
},
};

View File

@ -0,0 +1,63 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("multiple_choices", {
ID_MULTIPLE_CHOICES: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_ADMIN_EXERCISE: {
type: Sequelize.UUID,
allowNull: false,
},
OPTION_A: {
type: Sequelize.STRING(256),
allowNull: true,
},
OPTION_B: {
type: Sequelize.STRING(256),
allowNull: true,
},
OPTION_C: {
type: Sequelize.STRING(256),
allowNull: true,
},
OPTION_D: {
type: Sequelize.STRING(256),
allowNull: true,
},
OPTION_E: {
type: Sequelize.STRING(256),
allowNull: true,
},
ANSWER_KEY: {
type: Sequelize.STRING(100),
allowNull: false,
},
TIME_MULTIPLE_CHOICES: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("multiple_choices", {
fields: ["ID_ADMIN_EXERCISE"],
type: "foreign key",
name: "FK_MC_TERDAPAT",
references: {
table: "admin_exercise",
field: "ID_ADMIN_EXERCISE",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("multiple_choices");
},
};

View File

@ -0,0 +1,47 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("matching_pairs", {
ID_MATCHING_PAIRS: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_ADMIN_EXERCISE: {
type: Sequelize.UUID,
allowNull: false,
},
LEFT_PAIR: {
type: Sequelize.TEXT,
allowNull: true,
},
RIGHT_PAIR: {
type: Sequelize.TEXT,
allowNull: true,
},
TIME_MATCHING_PAIRS: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("matching_pairs", {
fields: ["ID_ADMIN_EXERCISE"],
type: "foreign key",
name: "FK_MP_TERDAPAT",
references: {
table: "admin_exercise",
field: "ID_ADMIN_EXERCISE",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("matching_pairs");
},
};

View File

@ -0,0 +1,43 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("true_false", {
ID_TRUE_FALSE: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_ADMIN_EXERCISE: {
type: Sequelize.UUID,
allowNull: false,
},
IS_TRUE: {
type: Sequelize.TINYINT(1),
allowNull: false,
},
TIME_TRUE_FALSE: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("true_false", {
fields: ["ID_ADMIN_EXERCISE"],
type: "foreign key",
name: "FK_TF_TERDAPAT",
references: {
table: "admin_exercise",
field: "ID_ADMIN_EXERCISE",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("true_false");
},
};

View File

@ -0,0 +1,98 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("student_learning", {
ID_STUDENT_LEARNING: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID: {
type: Sequelize.UUID,
allowNull: false,
},
ID_LEVEL: {
type: Sequelize.UUID,
allowNull: false,
},
STUDENT_START: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW,
},
STUDENT_FINISH: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: null,
},
SCORE: {
type: Sequelize.INTEGER(11),
allowNull: true,
defaultValue: null,
},
IS_PASS: {
type: Sequelize.TINYINT(1),
allowNull: false,
defaultValue: 0,
},
NEXT_LEARNING: {
type: Sequelize.UUID,
allowNull: true,
defaultValue: null,
},
FEEDBACK_STUDENT: {
type: Sequelize.STRING(200),
allowNull: true,
defaultValue: null,
},
TIME_LEARNING: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
onUpdate: Sequelize.NOW,
},
});
await queryInterface.addConstraint("student_learning", {
fields: ["ID"],
type: "foreign key",
name: "FK_MENGAKSES",
references: {
table: "users",
field: "ID",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
await queryInterface.addConstraint("student_learning", {
fields: ["ID_LEVEL"],
type: "foreign key",
name: "FK_DIGUNAKAN",
references: {
table: "level",
field: "ID_LEVEL",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
await queryInterface.addConstraint("student_learning", {
fields: ["NEXT_LEARNING"],
type: "foreign key",
name: "FK_MELANJUTKAN",
references: {
table: "level",
field: "ID_LEVEL",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("student_learning");
},
};

View File

@ -0,0 +1,70 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("student_exercise", {
ID_STUDENT_EXERCISE: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_ADMIN_EXERCISE: {
type: Sequelize.UUID,
allowNull: false,
},
ID_STUDENT_LEARNING: {
type: Sequelize.UUID,
allowNull: false,
},
ANSWER_STUDENT: {
type: Sequelize.STRING(256),
allowNull: false,
},
IS_CORRECT: {
type: Sequelize.TINYINT(1),
allowNull: false,
defaultValue: 0,
},
RESULT_SCORE_STUDENT: {
type: Sequelize.FLOAT,
allowNull: true,
defaultValue: null,
},
TIME_STUDENT_EXC: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
onUpdate: Sequelize.NOW,
},
});
await queryInterface.addConstraint("student_exercise", {
fields: ["ID_ADMIN_EXERCISE"],
type: "foreign key",
name: "FK_MENGERJAKAN",
references: {
table: "admin_exercise",
field: "ID_ADMIN_EXERCISE",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
await queryInterface.addConstraint("student_exercise", {
fields: ["ID_STUDENT_LEARNING"],
type: "foreign key",
name: "FK_MELIBATKAN",
references: {
table: "student_learning",
field: "ID_STUDENT_LEARNING",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
},
async down(queryInterface) {
await queryInterface.dropTable("student_exercise");
},
};

View File

@ -0,0 +1,75 @@
const { Sequelize } = require("sequelize");
module.exports = {
async up(queryInterface) {
await queryInterface.createTable("monitoring", {
ID_MONITORING: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
},
ID_STUDENT_LEARNING: {
type: Sequelize.UUID,
allowNull: false,
},
ID_CLASS: {
type: Sequelize.UUID,
allowNull: true,
},
ID_GURU: {
type: Sequelize.UUID,
allowNull: true,
},
FEEDBACK_GURU: {
type: Sequelize.STRING(200),
allowNull: true,
},
TIME_MONITORING: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
});
await queryInterface.addConstraint("monitoring", {
fields: ["ID_STUDENT_LEARNING"],
type: "foreign key",
name: "FK_MENGACU",
references: {
table: "student_learning",
field: "ID_STUDENT_LEARNING",
},
onUpdate: "CASCADE",
onDelete: "CASCADE",
});
await queryInterface.addConstraint("monitoring", {
fields: ["ID_CLASS"],
type: "foreign key",
name: "FK_MENDAPATKAN",
references: {
table: "class",
field: "ID_CLASS",
},
onUpdate: "CASCADE",
onDelete: "SET NULL",
});
await queryInterface.addConstraint("monitoring", {
fields: ["ID_GURU"],
type: "foreign key",
name: "FK_DILAKUKAN",
references: {
table: "teacher",
field: "ID_GURU",
},
onUpdate: "CASCADE",
onDelete: "SET NULL",
});
},
async down(queryInterface) {
await queryInterface.dropTable("monitoring");
},
};

View File

@ -39,7 +39,7 @@ const ExerciseModel = (DataTypes) => {
}, },
}, },
SCORE_WEIGHT: { SCORE_WEIGHT: {
type: DataTypes.INTEGER(6), type: DataTypes.INTEGER(11),
allowNull: false, allowNull: false,
defaultValue: 1, defaultValue: 1,
validate: { validate: {
@ -66,7 +66,7 @@ const ExerciseModel = (DataTypes) => {
allowNull: true, allowNull: true,
}, },
IS_DELETED: { IS_DELETED: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: true,
defaultValue: 0, defaultValue: 0,
validate: { validate: {

View File

@ -58,7 +58,7 @@ const LevelModel = (DataTypes) => {
allowNull: true, allowNull: true,
}, },
IS_PRETEST: { IS_PRETEST: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: true,
defaultValue: 0, defaultValue: 0,
validate: { validate: {
@ -91,7 +91,7 @@ const LevelModel = (DataTypes) => {
allowNull: false, allowNull: false,
}, },
IS_DELETED: { IS_DELETED: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: true,
defaultValue: 0, defaultValue: 0,
validate: { validate: {

View File

@ -31,7 +31,7 @@ const SectionModel = (DataTypes) => {
allowNull: true, allowNull: true,
}, },
IS_DELETED: { IS_DELETED: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: true,
defaultValue: 0, defaultValue: 0,
validate: { validate: {

View File

@ -38,7 +38,7 @@ const TopicModel = (DataTypes) => {
}, },
}, },
IS_DELETED: { IS_DELETED: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: true,
defaultValue: 0, defaultValue: 0,
validate: { validate: {

View File

@ -25,28 +25,28 @@ const MultipleChoicesModel = (DataTypes) => {
}, },
}, },
OPTION_A: { OPTION_A: {
type: DataTypes.STRING(200), type: DataTypes.STRING(256),
allowNull: true, allowNull: true,
}, },
OPTION_B: { OPTION_B: {
type: DataTypes.STRING(200), type: DataTypes.STRING(256),
allowNull: true, allowNull: true,
}, },
OPTION_C: { OPTION_C: {
type: DataTypes.STRING(200), type: DataTypes.STRING(256),
allowNull: true, allowNull: true,
}, },
OPTION_D: { OPTION_D: {
type: DataTypes.STRING(200), type: DataTypes.STRING(256),
allowNull: true, allowNull: true,
}, },
OPTION_E: { OPTION_E: {
type: DataTypes.STRING(200), type: DataTypes.STRING(256),
allowNull: true, allowNull: true,
}, },
ANSWER_KEY: { ANSWER_KEY: {
type: DataTypes.STRING(5), type: DataTypes.STRING(100),
allowNull: true, allowNull: false,
}, },
TIME_MULTIPLE_CHOICES: { TIME_MULTIPLE_CHOICES: {
type: DataTypes.DATE, type: DataTypes.DATE,

View File

@ -26,7 +26,7 @@ const TrueFalseModel = (DataTypes) => {
}, },
IS_TRUE: { IS_TRUE: {
type: DataTypes.TINYINT(1), type: DataTypes.TINYINT(1),
allowNull: true, allowNull: false,
}, },
TIME_TRUE_FALSE: { TIME_TRUE_FALSE: {
type: DataTypes.DATE, type: DataTypes.DATE,

View File

@ -36,14 +36,14 @@ const StdExerciseModel = (DataTypes) => {
}, },
}, },
ANSWER_STUDENT: { ANSWER_STUDENT: {
type: DataTypes.CHAR(1), type: DataTypes.STRING(256),
allowNull: false, allowNull: false,
validate: { validate: {
notEmpty: true, notEmpty: true,
}, },
}, },
IS_CORRECT: { IS_CORRECT: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: false, allowNull: false,
defaultValue: 0, defaultValue: 0,
validate: { validate: {
@ -52,7 +52,7 @@ const StdExerciseModel = (DataTypes) => {
}, },
}, },
RESULT_SCORE_STUDENT: { RESULT_SCORE_STUDENT: {
type: DataTypes.INTEGER, type: DataTypes.FLOAT,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
}, },

View File

@ -46,12 +46,12 @@ const StdLearningModel = (DataTypes) => {
defaultValue: null, defaultValue: null,
}, },
SCORE: { SCORE: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER(11),
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
}, },
IS_PASS: { IS_PASS: {
type: DataTypes.INTEGER(1), type: DataTypes.TINYINT(1),
allowNull: false, allowNull: false,
defaultValue: 0, defaultValue: 0,
validate: { validate: {

View File

@ -25,7 +25,7 @@ const ReportModel = (DataTypes) => {
}, },
}, },
REPORTS: { REPORTS: {
type: DataTypes.STRING, type: DataTypes.STRING(256),
allowNull: false, allowNull: false,
validate: { validate: {
notEmpty: true, notEmpty: true,