/*********************************************************************************************************************************************************************** * File Name: lesson_reading_progress.mdl.js * Type of Program: Model * Description: Tracks a user's reading progress at the lesson level. * * LessonReadingProgress — one row per (user, lesson). * UPSERT key: (user_id, lesson_id) * status is set directly by the caller ('in_progress' | 'completed'). * last_accessed_at updated on every UPSERT. * * Author: Kenneth Obsequio (@lash0000) * Date Created: Jun. 26, 2026 ***********************************************************************************************************************************************************************/ const { DataTypes } = require('sequelize'); const sequelize = require('../../config/db.config'); const LessonReadingProgress = sequelize.define('LessonReadingProgress', { progress_id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, user_id: { type: DataTypes.BIGINT, allowNull: false, references: { model: 'users', key: 'user_id' }, onDelete: 'CASCADE', }, course_id: { type: DataTypes.BIGINT, allowNull: true, // NULL when the lesson is read standalone (outside any course) references: { model: 'courses', key: 'course_id' }, onDelete: 'CASCADE', }, unit_id: { type: DataTypes.BIGINT, allowNull: true, // NULL when the lesson is read standalone (outside any unit) references: { model: 'units', key: 'unit_id' }, onDelete: 'CASCADE', }, lesson_id: { type: DataTypes.BIGINT, allowNull: false, references: { model: 'lessons', key: 'lesson_id' }, onDelete: 'CASCADE', }, status: { type: DataTypes.ENUM('in_progress', 'completed'), allowNull: false, defaultValue: 'in_progress', }, completed_at: { type: DataTypes.DATE, allowNull: true, comment: 'Set when status flips to completed. Null while in_progress.', }, last_accessed_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW, comment: 'Updated on every UPSERT.', }, // ── Audit trails ──────────────────────────────────────────────────────── createdBy: { type: DataTypes.BIGINT, allowNull: true }, updatedBy: { type: DataTypes.BIGINT, allowNull: true }, }, { tableName: 'lesson_reading_progress', timestamps: true, paranoid: false, indexes: [ { unique: true, fields: ['user_id', 'lesson_id'], name: 'uq_lrp_user_lesson', }, { fields: ['user_id'], name: 'idx_lrp_user_id' }, { fields: ['course_id'], name: 'idx_lrp_course_id' }, { fields: ['unit_id'], name: 'idx_lrp_unit_id' }, { fields: ['lesson_id'], name: 'idx_lrp_lesson_id' }, { fields: ['status'], name: 'idx_lrp_status' }, ], }); module.exports = LessonReadingProgress;