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;