course,tasklist,task and completed validation

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-17 13:04:27 +08:00
parent 612805acaf
commit d49e3be4d2
26 changed files with 1174 additions and 69 deletions
+21 -1
View File
@@ -90,6 +90,21 @@ const TaskRequirement = sequelize.define('TaskRequirement', {
timestamps: true,
});
// ─── Junction: Task ↔ Task (explicit prerequisite graph) ──────────────────────
const TaskPrerequisite = sequelize.define('TaskPrerequisite', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
task_id: { type: DataTypes.UUID, allowNull: false, references: { model: 'tasks', key: 'task_id' }, onDelete: 'CASCADE', },
prerequisite_task_id: { type: DataTypes.UUID, allowNull: false, references: { model: 'tasks', key: 'task_id' }, onDelete: 'CASCADE', },
}, {
tableName: 'task_prerequisites',
timestamps: true,
indexes: [
{ unique: true, fields: ['task_id', 'prerequisite_task_id'], name: 'uq_task_prerequisite' },
{ fields: ['task_id'], name: 'idx_tp_task_id' },
{ fields: ['prerequisite_task_id'], name: 'idx_tp_prerequisite_task_id' },
],
});
TaskList.hasMany(Task, { foreignKey: 'task_list_id', as: 'tasks' });
Task.belongsTo(TaskList, { foreignKey: 'task_list_id', as: 'taskList' });
Task.hasMany(TaskRequirement, { foreignKey: 'task_id', as: 'requirements' });
@@ -99,4 +114,9 @@ TaskRequirement.belongsTo(Task, { foreignKey: 'task_id', as: 'task' });
TaskList.belongsToMany(mdl_UserGroups, { through: TaskListGroup, foreignKey: 'task_list_id', otherKey: 'group_id', as: 'groups', });
mdl_UserGroups.belongsToMany(TaskList, { through: TaskListGroup, foreignKey: 'group_id', otherKey: 'task_list_id', as: 'taskLists', });
module.exports = { Task, TaskList, TaskRequirement, TaskListGroup, mdl_UserGroups };
// Task ↔ Task (self-referential many-to-many through TaskPrerequisite)
// 'prerequisites' — tasks THIS task depends on. 'dependents' — tasks that depend on THIS task.
Task.belongsToMany(Task, { through: TaskPrerequisite, foreignKey: 'task_id', otherKey: 'prerequisite_task_id', as: 'prerequisites' });
Task.belongsToMany(Task, { through: TaskPrerequisite, foreignKey: 'prerequisite_task_id', otherKey: 'task_id', as: 'dependents' });
module.exports = { Task, TaskList, TaskRequirement, TaskListGroup, TaskPrerequisite, mdl_UserGroups };