/** * UserBookmark Model * Junction table for user-saved questions */ const { DataTypes } = require('sequelize'); const { v4: uuidv4 } = require('uuid'); module.exports = (sequelize) => { const UserBookmark = sequelize.define('UserBookmark', { id: { type: DataTypes.UUID, defaultValue: () => uuidv4(), primaryKey: true, allowNull: false, comment: 'Primary key UUID' }, userId: { type: DataTypes.UUID, allowNull: false, references: { model: 'users', key: 'id' }, onDelete: 'CASCADE', comment: 'Reference to user who bookmarked' }, questionId: { type: DataTypes.UUID, allowNull: false, references: { model: 'questions', key: 'id' }, onDelete: 'CASCADE', comment: 'Reference to bookmarked question' }, notes: { type: DataTypes.TEXT, allowNull: true, comment: 'Optional notes about the bookmark' }, createdAt: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW, field: 'created_at', comment: 'When the bookmark was created' }, updatedAt: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW, field: 'updated_at', comment: 'When the bookmark was last updated' } }, { tableName: 'user_bookmarks', timestamps: true, underscored: true, indexes: [ { unique: true, fields: ['user_id', 'question_id'], name: 'idx_user_question_unique' }, { fields: ['user_id'], name: 'idx_user_bookmarks_user' }, { fields: ['question_id'], name: 'idx_user_bookmarks_question' }, { fields: ['bookmarked_at'], name: 'idx_user_bookmarks_date' } ] }); // Define associations UserBookmark.associate = function(models) { UserBookmark.belongsTo(models.User, { foreignKey: 'userId', as: 'User' }); UserBookmark.belongsTo(models.Question, { foreignKey: 'questionId', as: 'Question' }); }; return UserBookmark; };