38553-vm/backend/src/db/migrations/1771397896747.js
2026-02-18 06:59:51 +00:00

10234 lines
325 KiB
JavaScript

module.exports = {
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async up(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.createTable('users', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('roles', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('permissions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('organizations', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('oauth_accounts', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('artist_profiles', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('teams', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('team_memberships', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('plans', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('subscriptions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('distribution_platforms', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('genres', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('releases', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('tracks', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('track_contributors', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('release_deliveries', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('smart_links', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('smart_link_destinations', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('smart_link_clicks', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('playlists', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('pitch_requests', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('playlist_placements', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('royalty_reports', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('royalty_lines', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('wallets', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('wallet_transactions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('payout_methods', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('withdrawal_requests', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('tax_documents', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('analytics_daily', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('notifications', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('notification_preferences', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('api_keys', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('dashboard_widgets', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('activity_events', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('blog_posts', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('faq_items', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('contact_messages', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('referral_programs', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('referral_links', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('referral_conversions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.addColumn(
'users',
'firstName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'lastName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'phoneNumber',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'email',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'disabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'password',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerified',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'provider',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'app_roleId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'roles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'role_customization',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'globalAccess',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'permissions',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'organizations',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'provider',
{
type: Sequelize.DataTypes.ENUM,
values: ['vk','yandex','google','apple'],
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'provider_user_key',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'access_token',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'refresh_token',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'token_expires_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'oauth_accounts',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'artist_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'profile_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['solo_artist','group','label'],
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'legal_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'city',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'tax_residency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'payout_currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'bio',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'website_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'vk_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'youtube_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'tiktok_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'instagram_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'artist_profiles',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'teams',
'ownerId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'teams',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'teams',
'description',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'teams',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'teamId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'teams',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'member_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'role',
{
type: Sequelize.DataTypes.ENUM,
values: ['owner','admin','editor','viewer','finance_manager'],
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['invited','active','revoked'],
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'invited_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'accepted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'team_memberships',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'plan_code',
{
type: Sequelize.DataTypes.ENUM,
values: ['basic','pro','label'],
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'price_amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'price_currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'billing_period',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'features',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'plans',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'planId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'plans',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['trialing','active','past_due','canceled','expired'],
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'starts_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'ends_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'auto_renew',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'external_billing_key',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'subscriptions',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'distribution_platforms',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'distribution_platforms',
'category',
{
type: Sequelize.DataTypes.ENUM,
values: ['streaming','social','other'],
},
{ transaction }
);
await queryInterface.addColumn(
'distribution_platforms',
'website_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'distribution_platforms',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'distribution_platforms',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'genres',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'genres',
'parent_genreId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'genres',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'genres',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'genres',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'artist_profileId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'artist_profiles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'release_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['single','ep','album','compilation','podcast'],
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'primary_genreId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'genres',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'secondary_genreId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'genres',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'language',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'label_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'copyright_notice',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'production_notice',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'upc_code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'upc_source',
{
type: Sequelize.DataTypes.ENUM,
values: ['auto','manual'],
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'release_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'original_release_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'moderation_status',
{
type: Sequelize.DataTypes.ENUM,
values: ['draft','submitted','in_review','changes_requested','approved','published','rejected','takedown_requested','takedown_completed'],
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'moderation_notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'explicit_content',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'license_accepted',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'content_id_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'content_match_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'internal_catalog_code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'releases',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'releaseId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'releases',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'track_number',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'version',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'genreId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'genres',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'isrc_code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'isrc_source',
{
type: Sequelize.DataTypes.ENUM,
values: ['auto','manual'],
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'duration_seconds',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'sample_rate_hz',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'bitrate_kbps',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'audio_format',
{
type: Sequelize.DataTypes.ENUM,
values: ['wav','flac','mp3'],
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'explicit_content',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'lyrics',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'audio_fingerprint',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'quality_status',
{
type: Sequelize.DataTypes.ENUM,
values: ['pending','passed','failed','needs_attention'],
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'quality_notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tracks',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'trackId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tracks',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'role',
{
type: Sequelize.DataTypes.ENUM,
values: ['primary_artist','featured_artist','producer','composer','lyricist','mixer','mastering_engineer','session_musician'],
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'spotify_artist_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'apple_artist_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'society_identifier',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'track_contributors',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'releaseId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'releases',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'delivery_status',
{
type: Sequelize.DataTypes.ENUM,
values: ['not_sent','queued','sent','processing','delivered','failed','takedown_sent','takedown_completed'],
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'requested_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'sent_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'delivered_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'platform_release_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'external_reference',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'error_message',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'release_deliveries',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'releaseId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'releases',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'slug',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'page_title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'custom_text',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'theme_color',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'is_public',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'published_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_links',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'smart_linkId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'smart_links',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'destination_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'sort_order',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'is_primary',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_destinations',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'smart_linkId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'smart_links',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'clicked_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'city',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'referrer',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'utm_source',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'utm_campaign',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'smart_link_clicks',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'playlist_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['editorial','partner_curator','user'],
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'curator_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'playlist_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'genre_focus',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'mood_tags',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'playlists',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'trackId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tracks',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'artist_profileId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'artist_profiles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'pitch_title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'pitch_text',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'mood',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'similar_artists',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'achievements',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['draft','sent','under_review','accepted','rejected'],
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'submitted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'decided_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'decision_notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'pitch_requests',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'trackId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tracks',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'playlistId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'playlists',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'placed_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'removed_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'position',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'playlist_placements',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'artist_profileId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'artist_profiles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'period_start_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'period_end_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'source_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['api','csv','xml','manual'],
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'source_reference',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['imported','processing','completed','failed'],
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'error_details',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_reports',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'royalty_reportId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'royalty_reports',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'releaseId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'releases',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'trackId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tracks',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'territory',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'store_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'quantity',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'unit_rate',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'gross_amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'net_amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'event_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'usage_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['stream','download','video','ugc','content_id','other'],
},
{ transaction }
);
await queryInterface.addColumn(
'royalty_lines',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'available_balance',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'pending_balance',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'lifetime_earned',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'lifetime_paid_out',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'minimum_withdrawal_amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallets',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'walletId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'wallets',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'transaction_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['royalty_accrual','adjustment','withdrawal_request','withdrawal_paid','withdrawal_failed','refund','fee'],
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'posted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'description',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'external_reference',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'wallet_transactions',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'method_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['bank_card','bank_transfer','paypal','webmoney','yookassa','robokassa','crypto'],
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'method_label',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'account_identifier',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'holder_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'is_default',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['active','disabled','needs_verification'],
},
{ transaction }
);
await queryInterface.addColumn(
'payout_methods',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'walletId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'wallets',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'payout_methodId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'payout_methods',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['requested','approved','processing','paid','rejected','failed','canceled'],
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'requested_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'processed_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'processor_reference',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'failure_reason',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'withdrawal_requests',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'document_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['w8ben','ndfl_2','invoice','vat_statement','other'],
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['draft','submitted','approved','rejected','expired'],
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'issued_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'expires_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tax_documents',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'artist_profileId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'artist_profiles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'platformId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'distribution_platforms',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'releaseId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'releases',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'trackId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'tracks',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'metric_date',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'streams',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'unique_listeners',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'saves',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'likes',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'shares',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'country',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'city',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'traffic_source',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'analytics_daily',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'channel',
{
type: Sequelize.DataTypes.ENUM,
values: ['email','push','telegram','sms','in_app'],
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'event_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['release_published','royalty_accrual','playlist_added','moderation_status_changed','withdrawal_processed','system_announcement','security_new_login'],
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'message',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'scheduled_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'sent_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['queued','sent','failed','canceled'],
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'provider_reference',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notifications',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'email_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'push_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'telegram_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'sms_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'in_app_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'release_updates_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'finance_updates_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'playlist_updates_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'marketing_updates_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'quiet_hours',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'notification_preferences',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'key_prefix',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'key_hash',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'scopes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'last_used_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'expires_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['active','revoked'],
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'widget_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['kpi_cards','streams_chart','revenue_by_platform','listener_geography','quick_actions','activity_feed','latest_releases'],
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'sort_order',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'is_visible',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'settings_json',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'dashboard_widgets',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'event_kind',
{
type: Sequelize.DataTypes.ENUM,
values: ['playlist','finance','moderation','milestone','notification','warning','security'],
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'headline',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'details',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'occurred_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'entity_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'entity_key',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'activity_events',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'slug',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'category',
{
type: Sequelize.DataTypes.ENUM,
values: ['platform_updates','industry_news','guides','success_stories','webinars'],
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'excerpt',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'content',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'is_published',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'published_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'seo_title',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'seo_description',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'blog_posts',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'category',
{
type: Sequelize.DataTypes.ENUM,
values: ['general','uploading','payouts','platforms','technical','copyright'],
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'question',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'answer',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'sort_order',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'is_published',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'faq_items',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'email',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'subject',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'message',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['new','in_progress','resolved','spam'],
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'submitted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'contact_messages',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'commission_percent',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'validity_days',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'starts_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'ends_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_programs',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'referrer_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'programId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'referral_programs',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'landing_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'created_on',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_links',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'referral_linkId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'referral_links',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'referred_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'converted_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['pending','qualified','disqualified'],
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'commission_amount',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'currency',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'referral_conversions',
'organizationsId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'organizations',
key: 'id',
},
},
{ transaction }
);
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async down(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.removeColumn(
'referral_conversions',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'currency',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'commission_amount',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'converted_at',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'referred_userId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_conversions',
'referral_linkId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'created_on',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'landing_url',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'code',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'programId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_links',
'referrer_userId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'ends_at',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'starts_at',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'validity_days',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'commission_percent',
{ transaction }
);
await queryInterface.removeColumn(
'referral_programs',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'submitted_at',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'message',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'subject',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'email',
{ transaction }
);
await queryInterface.removeColumn(
'contact_messages',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'is_published',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'sort_order',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'answer',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'question',
{ transaction }
);
await queryInterface.removeColumn(
'faq_items',
'category',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'seo_description',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'seo_title',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'published_at',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'is_published',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'content',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'excerpt',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'category',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'slug',
{ transaction }
);
await queryInterface.removeColumn(
'blog_posts',
'title',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'entity_key',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'entity_name',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'occurred_at',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'details',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'headline',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'event_kind',
{ transaction }
);
await queryInterface.removeColumn(
'activity_events',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'settings_json',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'is_visible',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'sort_order',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'widget_type',
{ transaction }
);
await queryInterface.removeColumn(
'dashboard_widgets',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'expires_at',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'last_used_at',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'scopes',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'key_hash',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'key_prefix',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'quiet_hours',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'marketing_updates_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'playlist_updates_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'finance_updates_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'release_updates_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'in_app_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'sms_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'telegram_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'push_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'email_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'notification_preferences',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'provider_reference',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'sent_at',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'scheduled_at',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'message',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'title',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'event_type',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'channel',
{ transaction }
);
await queryInterface.removeColumn(
'notifications',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'traffic_source',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'city',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'country',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'shares',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'likes',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'saves',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'unique_listeners',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'streams',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'metric_date',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'trackId',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'releaseId',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'analytics_daily',
'artist_profileId',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'notes',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'expires_at',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'issued_at',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'document_type',
{ transaction }
);
await queryInterface.removeColumn(
'tax_documents',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'failure_reason',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'processor_reference',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'processed_at',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'requested_at',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'currency',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'amount',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'payout_methodId',
{ transaction }
);
await queryInterface.removeColumn(
'withdrawal_requests',
'walletId',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'is_default',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'country',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'holder_name',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'account_identifier',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'method_label',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'method_type',
{ transaction }
);
await queryInterface.removeColumn(
'payout_methods',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'external_reference',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'description',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'posted_at',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'currency',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'amount',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'transaction_type',
{ transaction }
);
await queryInterface.removeColumn(
'wallet_transactions',
'walletId',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'minimum_withdrawal_amount',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'lifetime_paid_out',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'lifetime_earned',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'pending_balance',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'available_balance',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'currency',
{ transaction }
);
await queryInterface.removeColumn(
'wallets',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'usage_type',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'event_at',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'currency',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'net_amount',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'gross_amount',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'unit_rate',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'quantity',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'store_name',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'territory',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'trackId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'releaseId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_lines',
'royalty_reportId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'error_details',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'source_reference',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'source_type',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'period_end_at',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'period_start_at',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'royalty_reports',
'artist_profileId',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'notes',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'position',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'removed_at',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'placed_at',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'playlistId',
{ transaction }
);
await queryInterface.removeColumn(
'playlist_placements',
'trackId',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'decision_notes',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'decided_at',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'submitted_at',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'achievements',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'similar_artists',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'mood',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'pitch_text',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'pitch_title',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'artist_profileId',
{ transaction }
);
await queryInterface.removeColumn(
'pitch_requests',
'trackId',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'mood_tags',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'genre_focus',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'playlist_url',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'curator_name',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'playlist_type',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'playlists',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'utm_campaign',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'utm_source',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'referrer',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'city',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'country',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'clicked_at',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_clicks',
'smart_linkId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'is_primary',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'sort_order',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'destination_url',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_link_destinations',
'smart_linkId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'published_at',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'is_public',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'theme_color',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'custom_text',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'page_title',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'slug',
{ transaction }
);
await queryInterface.removeColumn(
'smart_links',
'releaseId',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'error_message',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'external_reference',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'platform_release_url',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'delivered_at',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'sent_at',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'requested_at',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'delivery_status',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'platformId',
{ transaction }
);
await queryInterface.removeColumn(
'release_deliveries',
'releaseId',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'society_identifier',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'apple_artist_url',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'spotify_artist_url',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'role',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'track_contributors',
'trackId',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'quality_notes',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'quality_status',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'audio_fingerprint',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'lyrics',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'explicit_content',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'audio_format',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'bitrate_kbps',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'sample_rate_hz',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'duration_seconds',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'isrc_source',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'isrc_code',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'genreId',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'version',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'track_number',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'title',
{ transaction }
);
await queryInterface.removeColumn(
'tracks',
'releaseId',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'internal_catalog_code',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'content_match_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'content_id_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'license_accepted',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'explicit_content',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'moderation_notes',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'moderation_status',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'original_release_date',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'release_date',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'upc_source',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'upc_code',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'production_notice',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'copyright_notice',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'label_name',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'language',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'secondary_genreId',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'primary_genreId',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'release_type',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'title',
{ transaction }
);
await queryInterface.removeColumn(
'releases',
'artist_profileId',
{ transaction }
);
await queryInterface.removeColumn(
'genres',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'genres',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'genres',
'parent_genreId',
{ transaction }
);
await queryInterface.removeColumn(
'genres',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'distribution_platforms',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'distribution_platforms',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'distribution_platforms',
'website_url',
{ transaction }
);
await queryInterface.removeColumn(
'distribution_platforms',
'category',
{ transaction }
);
await queryInterface.removeColumn(
'distribution_platforms',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'external_billing_key',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'auto_renew',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'ends_at',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'starts_at',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'planId',
{ transaction }
);
await queryInterface.removeColumn(
'subscriptions',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'features',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'billing_period',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'price_currency',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'price_amount',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'plan_code',
{ transaction }
);
await queryInterface.removeColumn(
'plans',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'accepted_at',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'invited_at',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'role',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'member_userId',
{ transaction }
);
await queryInterface.removeColumn(
'team_memberships',
'teamId',
{ transaction }
);
await queryInterface.removeColumn(
'teams',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'teams',
'description',
{ transaction }
);
await queryInterface.removeColumn(
'teams',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'teams',
'ownerId',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'instagram_url',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'tiktok_url',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'youtube_url',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'vk_url',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'website_url',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'bio',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'payout_currency',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'tax_residency',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'city',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'country',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'legal_name',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'profile_type',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'artist_name',
{ transaction }
);
await queryInterface.removeColumn(
'artist_profiles',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'token_expires_at',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'refresh_token',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'access_token',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'provider_user_key',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'provider',
{ transaction }
);
await queryInterface.removeColumn(
'oauth_accounts',
'userId',
{ transaction }
);
await queryInterface.removeColumn(
'organizations',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'permissions',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'globalAccess',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'role_customization',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'organizationsId',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'app_roleId',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'provider',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerified',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'password',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'disabled',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'email',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'phoneNumber',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'lastName',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'firstName',
{ transaction }
);
await queryInterface.dropTable('referral_conversions', { transaction });
await queryInterface.dropTable('referral_links', { transaction });
await queryInterface.dropTable('referral_programs', { transaction });
await queryInterface.dropTable('contact_messages', { transaction });
await queryInterface.dropTable('faq_items', { transaction });
await queryInterface.dropTable('blog_posts', { transaction });
await queryInterface.dropTable('activity_events', { transaction });
await queryInterface.dropTable('dashboard_widgets', { transaction });
await queryInterface.dropTable('api_keys', { transaction });
await queryInterface.dropTable('notification_preferences', { transaction });
await queryInterface.dropTable('notifications', { transaction });
await queryInterface.dropTable('analytics_daily', { transaction });
await queryInterface.dropTable('tax_documents', { transaction });
await queryInterface.dropTable('withdrawal_requests', { transaction });
await queryInterface.dropTable('payout_methods', { transaction });
await queryInterface.dropTable('wallet_transactions', { transaction });
await queryInterface.dropTable('wallets', { transaction });
await queryInterface.dropTable('royalty_lines', { transaction });
await queryInterface.dropTable('royalty_reports', { transaction });
await queryInterface.dropTable('playlist_placements', { transaction });
await queryInterface.dropTable('pitch_requests', { transaction });
await queryInterface.dropTable('playlists', { transaction });
await queryInterface.dropTable('smart_link_clicks', { transaction });
await queryInterface.dropTable('smart_link_destinations', { transaction });
await queryInterface.dropTable('smart_links', { transaction });
await queryInterface.dropTable('release_deliveries', { transaction });
await queryInterface.dropTable('track_contributors', { transaction });
await queryInterface.dropTable('tracks', { transaction });
await queryInterface.dropTable('releases', { transaction });
await queryInterface.dropTable('genres', { transaction });
await queryInterface.dropTable('distribution_platforms', { transaction });
await queryInterface.dropTable('subscriptions', { transaction });
await queryInterface.dropTable('plans', { transaction });
await queryInterface.dropTable('team_memberships', { transaction });
await queryInterface.dropTable('teams', { transaction });
await queryInterface.dropTable('artist_profiles', { transaction });
await queryInterface.dropTable('oauth_accounts', { transaction });
await queryInterface.dropTable('organizations', { transaction });
await queryInterface.dropTable('permissions', { transaction });
await queryInterface.dropTable('roles', { transaction });
await queryInterface.dropTable('users', { transaction });
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
}
};