StMarkSchoolApplication / app / config / db.config.js
db.config.js
Raw
const env = require('./env.js');
 
const Sequelize = require('sequelize');
const sequelize = new Sequelize(env.database, env.username, env.password, {
  host: env.host,
  dialect: env.dialect,
  operatorsAliases: false,
  dialectOptions: {
    socketPath: env.host
  },
  pool: {
    max: env.max,
    min: env.pool.min,
    acquire: env.pool.acquire,
    idle: env.pool.idle
  }
});
 
const db = {};
 
db.Sequelize = Sequelize;
db.sequelize = sequelize;
 
db.user = require('../DB_schema/user_table.js')(sequelize, Sequelize);
db.role = require('../DB_schema/role_table.js')(sequelize, Sequelize);
db.level = require('../DB_schema/level_table.js')(sequelize, Sequelize);
db.course = require('../DB_schema/course_table.js')(sequelize, Sequelize);
db.lesson = require('../DB_schema/lesson_table.js')(sequelize, Sequelize);
db.material = require('../DB_schema/material_table.js')(sequelize, Sequelize);
db.task = require('../DB_schema/task_table.js')(sequelize, Sequelize);
db.choice = require('../DB_schema/choice_table.js')(sequelize, Sequelize);
db.completed_course = require('../DB_schema/completed_course_table.js')(sequelize, Sequelize);
db.course_enrolment = require('../DB_schema/course_enrollment_table.js')(sequelize, Sequelize);
db.completed_task = require('../DB_schema/completed_task_table.js')(sequelize, Sequelize);
db.lesson_grade = require('../DB_schema/lesson-grade_table.js')(sequelize, Sequelize);
db.material_done = require('../DB_schema/finished-materials_table.js')(sequelize, Sequelize);
db.opened_lessons = require('../DB_schema/opened-lessons_table.js')(sequelize, Sequelize);

// M-M between user and roles
db.role.belongsToMany(db.user, { through: 'user_roles', foreignKey: 'roleId', otherKey: 'userId'});
db.user.belongsToMany(db.role, { through: 'user_roles', foreignKey: 'userId', otherKey: 'roleId'});

// 1-M between level and course & M-1 between course and level
db.level.hasMany(db.course, {foreignKey: 'level_id', sourceKey: 'id'});
db.course.belongsTo(db.level, {foreignKey: 'level_id', otherKey: 'id'});

// 1-M between course and lesson & M-1 between lesson and course
db.course.hasMany(db.lesson, {foreignKey: 'course_id', sourceKey: 'id'});
db.lesson.belongsTo(db.course, {foreignKey: 'course_id', otherKey: 'id'});

// 1-M between lesson and material & M-1 between material and lesson
db.lesson.hasMany(db.material, {foreignKey: 'lesson_id', sourceKey: 'id'});
db.material.belongsTo(db.lesson, {foreignKey: 'lesson_id', otherKey: 'id'});

// relations between user, material and finished_materials
db.material.hasMany(db.material_done, {foreignKey: 'material_id', sourceKey: 'id'})
db.user.hasMany(db.material_done, {foreignKey: 'user_id', sourceKey: 'id'})
db.material_done.belongsTo(db.material, {foreignKey: 'material_id', sourceKey: 'id'})
db.material_done.belongsTo(db.user, {foreignKey: 'user_id', sourceKey: 'id'})

// relations between user, lesson and opened_lessons
db.lesson.hasMany(db.opened_lessons, {foreignKey: 'lesson_id', sourceKey: 'id'})
db.user.hasMany(db.opened_lessons, {foreignKey: 'user_id', sourceKey: 'id'})
db.opened_lessons.belongsTo(db.lesson, {foreignKey: 'lesson_id', sourceKey: 'id'})
db.opened_lessons.belongsTo(db.user, {foreignKey: 'user_id', sourceKey: 'id'})

// relations between user, courses and course_enrolments
db.course.hasMany(db.course_enrolment, {foreignKey: 'course_id', sourceKey: 'id'})
db.user.hasMany(db.course_enrolment, {foreignKey: 'user_id', sourceKey: 'id'})
db.course_enrolment.belongsTo(db.course, {foreignKey: 'course_id', sourceKey: 'id'})
db.course_enrolment.belongsTo(db.user, {foreignKey: 'user_id', sourceKey: 'id'})

module.exports = db;