const { DataTypes } = require('sequelize'); const { sequelize } = require('../config/database'); const Menu = sequelize.define('Menu', { id: { type: DataTypes.INTEGER.UNSIGNED, primaryKey: true, autoIncrement: true }, parentId: { type: DataTypes.INTEGER.UNSIGNED, allowNull: true, references: { model: 'Menus', // 실제 테이블명 key: 'id' } }, title: { type: DataTypes.STRING, allowNull: false }, icon: { type: DataTypes.STRING, allowNull: true }, to: { type: DataTypes.STRING, allowNull: false }, featureCode: { type: DataTypes.STRING, allowNull: true, references: { model: 'Features', key: 'code' } }, requiredSubscriptionTier: { type: DataTypes.ENUM('basic', 'standard', 'premium'), allowNull: true }, role: { type: DataTypes.STRING, allowNull: false, defaultValue: 'user' }, order: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 0 }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true }, createdAt: { type: DataTypes.DATE, allowNull: false }, updatedAt: { type: DataTypes.DATE, allowNull: false } }, { tableName: 'Menus', timestamps: true }); Menu.associate = (models) => { Menu.belongsTo(models.Feature, { foreignKey: 'featureCode', targetKey: 'code', }); Menu.belongsTo(models.Menu, { as: 'parent', foreignKey: 'parentId', }); Menu.hasMany(models.Menu, { as: 'children', foreignKey: 'parentId', }); }; // 자기참조 관계를 associate에서 명확히 선언 Menu.associate = (models) => { Menu.hasMany(models.Menu, { foreignKey: 'parentId', as: 'children' }); Menu.belongsTo(models.Menu, { foreignKey: 'parentId', as: 'parent' }); }; module.exports = Menu;