update cate
All checks were successful
Deploy to Production / deploy (push) Successful in 20s

This commit is contained in:
Ken
2026-02-26 08:59:32 +07:00
parent 47ab75f264
commit 68308743ff
10 changed files with 429 additions and 128 deletions

30
models/Categories.js Normal file
View File

@@ -0,0 +1,30 @@
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const Categories = sequelize.define('Categories', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
category_code: { type: DataTypes.STRING(20), unique: true, allowNull: false },
category_name: { type: DataTypes.STRING(100), allowNull: false },
category_thumbnail: { type: DataTypes.STRING(255) },
category_name_en: { type: DataTypes.STRING(100) },
description: { type: DataTypes.TEXT },
is_active: { type: DataTypes.BOOLEAN, defaultValue: true },
is_premium: { type: DataTypes.BOOLEAN, defaultValue: false, comment: 'Nội dung premium' },
is_training: { type: DataTypes.BOOLEAN, defaultValue: false, comment: 'Nội dung đào tạo nhân sự' },
is_public: { type: DataTypes.BOOLEAN, defaultValue: false, comment: 'Nội dung tự học công khai' },
required_role: { type: DataTypes.STRING(50), comment: 'Role yêu cầu' },
min_subscription_tier: { type: DataTypes.STRING(50), comment: 'Gói tối thiểu: basic, premium, vip' },
created_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW },
updated_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW },
}, {
tableName: 'Categories',
timestamps: true,
underscored: true,
indexes: [
{ fields: ['is_premium'] },
{ fields: ['is_training'] },
{ fields: ['is_public'] },
],
});
module.exports = Categories;

View File

@@ -3,6 +3,7 @@ const { sequelize } = require('../config/database');
const Subject = sequelize.define('subjects', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
category_id: { type: DataTypes.UUID, allowNull: false, comment: 'Danh mục chủ đề' },
subject_code: { type: DataTypes.STRING(20), unique: true, allowNull: false },
subject_name: { type: DataTypes.STRING(100), allowNull: false },
subject_name_en: { type: DataTypes.STRING(100) },

View File

@@ -20,6 +20,7 @@ const StaffContract = require('./StaffContract');
// Group 3: Academic Structure
const AcademicYear = require('./AcademicYear');
const Categories = require('./Categories');
const Subject = require('./Subject');
const Class = require('./Class');
const ClassSchedule = require('./ClassSchedule');
@@ -149,6 +150,10 @@ const setupRelationships = () => {
ClassSchedule.belongsTo(TeacherDetail, { foreignKey: 'teacher_id', as: 'teacher' });
// Learning Content relationships (NEW)
// Categories -> Subject (1:N)
Categories.hasMany(Subject, { foreignKey: 'category_id', as: 'subjects' });
Subject.belongsTo(Categories, { foreignKey: 'category_id', as: 'category' });
// Subject -> Chapter (1:N)
Subject.hasMany(Chapter, { foreignKey: 'subject_id', as: 'chapters' });
Chapter.belongsTo(Subject, { foreignKey: 'subject_id', as: 'subject' });
@@ -277,6 +282,7 @@ module.exports = {
// Group 3: Academic Structure
AcademicYear,
Categories,
Subject,
Class,
ClassSchedule,