'use strict'; module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable('payment_policies', { policy_id: { type: Sequelize.BIGINT, primaryKey: true, autoIncrement: true, }, plan_id: { type: Sequelize.BIGINT, allowNull: true, unique: true, references: { model: 'tier_plans', key: 'plan_id' }, onDelete: 'CASCADE', }, // Array of { code, type:'flat'|'percent', value, currency?, max_discount?, // max_uses?, expires_at?, min_amount? } promo_rules: { type: Sequelize.JSONB, allowNull: false, defaultValue: [], }, // { allowed, window_value, window_unit:'minutes'|'hours'|'days', reason_required } refund_policy: { type: Sequelize.JSONB, allowNull: false, defaultValue: { allowed: true, window_value: 5, window_unit: 'minutes', reason_required: false }, }, // e.g. ["paypal"] allowed_providers: { type: Sequelize.JSONB, allowNull: false, defaultValue: ['paypal'], }, createdAt: { type: Sequelize.DATE, allowNull: false }, updatedAt: { type: Sequelize.DATE, allowNull: false }, }); await queryInterface.addIndex('payment_policies', ['plan_id']); }, async down(queryInterface) { await queryInterface.dropTable('payment_policies'); }, };