125 lines
3.2 KiB
JavaScript
125 lines
3.2 KiB
JavaScript
module.exports = {
|
|
async up(queryInterface, Sequelize) {
|
|
const transaction = await queryInterface.sequelize.transaction();
|
|
|
|
try {
|
|
const rows = await queryInterface.sequelize.query(
|
|
"SELECT to_regclass('public.files') AS regclass_name;",
|
|
{
|
|
transaction,
|
|
type: Sequelize.QueryTypes.SELECT,
|
|
},
|
|
);
|
|
const tableName = rows[0].regclass_name;
|
|
|
|
if (tableName) {
|
|
await transaction.commit();
|
|
return;
|
|
}
|
|
|
|
await queryInterface.createTable(
|
|
'files',
|
|
{
|
|
id: {
|
|
type: Sequelize.DataTypes.UUID,
|
|
defaultValue: Sequelize.DataTypes.UUIDV4,
|
|
primaryKey: true,
|
|
},
|
|
belongsTo: {
|
|
type: Sequelize.DataTypes.STRING(255),
|
|
allowNull: true,
|
|
},
|
|
belongsToId: {
|
|
type: Sequelize.DataTypes.UUID,
|
|
allowNull: true,
|
|
},
|
|
belongsToColumn: {
|
|
type: Sequelize.DataTypes.STRING(255),
|
|
allowNull: true,
|
|
},
|
|
name: {
|
|
type: Sequelize.DataTypes.STRING(2083),
|
|
allowNull: false,
|
|
},
|
|
sizeInBytes: {
|
|
type: Sequelize.DataTypes.INTEGER,
|
|
allowNull: true,
|
|
},
|
|
privateUrl: {
|
|
type: Sequelize.DataTypes.STRING(2083),
|
|
allowNull: true,
|
|
},
|
|
publicUrl: {
|
|
type: Sequelize.DataTypes.STRING(2083),
|
|
allowNull: false,
|
|
},
|
|
createdAt: {
|
|
type: Sequelize.DataTypes.DATE,
|
|
allowNull: false,
|
|
},
|
|
updatedAt: {
|
|
type: Sequelize.DataTypes.DATE,
|
|
allowNull: false,
|
|
},
|
|
deletedAt: {
|
|
type: Sequelize.DataTypes.DATE,
|
|
allowNull: true,
|
|
},
|
|
createdById: {
|
|
type: Sequelize.DataTypes.UUID,
|
|
allowNull: true,
|
|
references: {
|
|
key: 'id',
|
|
model: 'users',
|
|
},
|
|
onDelete: 'SET NULL',
|
|
onUpdate: 'CASCADE',
|
|
},
|
|
updatedById: {
|
|
type: Sequelize.DataTypes.UUID,
|
|
allowNull: true,
|
|
references: {
|
|
key: 'id',
|
|
model: 'users',
|
|
},
|
|
onDelete: 'SET NULL',
|
|
onUpdate: 'CASCADE',
|
|
},
|
|
},
|
|
{ transaction },
|
|
);
|
|
|
|
await transaction.commit();
|
|
} catch (err) {
|
|
await transaction.rollback();
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
async down(queryInterface, Sequelize) {
|
|
const transaction = await queryInterface.sequelize.transaction();
|
|
|
|
try {
|
|
const rows = await queryInterface.sequelize.query(
|
|
"SELECT to_regclass('public.files') AS regclass_name;",
|
|
{
|
|
transaction,
|
|
type: Sequelize.QueryTypes.SELECT,
|
|
},
|
|
);
|
|
const tableName = rows[0].regclass_name;
|
|
|
|
if (!tableName) {
|
|
await transaction.commit();
|
|
return;
|
|
}
|
|
|
|
await queryInterface.dropTable('files', { transaction });
|
|
await transaction.commit();
|
|
} catch (err) {
|
|
await transaction.rollback();
|
|
throw err;
|
|
}
|
|
},
|
|
};
|