@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
63 lines (62 loc) • 2.72 kB
JavaScript
import { Action } from '@directus/constants';
import { getHelpers } from '../helpers/index.js';
export async function up(knex) {
const helpers = getHelpers(knex);
await knex.schema.createTable('directus_comments', (table) => {
table.uuid('id').primary().notNullable();
table.string('collection', helpers.schema.getTableNameMaxLength()).notNullable();
table.string('item').notNullable();
table.text('comment').notNullable();
table.timestamp('date_created').defaultTo(knex.fn.now());
table.timestamp('date_updated').defaultTo(knex.fn.now());
table.uuid('user_created').references('id').inTable('directus_users').onDelete('SET NULL');
// Cannot have two constraints from/to the same table, handled on API side
table.uuid('user_updated').references('id').inTable('directus_users');
});
}
export async function down(knex) {
const rowsLimit = 50;
let hasMore = true;
while (hasMore) {
const comments = await knex
.select('id', 'collection', 'item', 'comment', 'date_created', 'user_created')
.from('directus_comments')
.limit(rowsLimit);
if (comments.length === 0) {
hasMore = false;
break;
}
await knex.transaction(async (trx) => {
for (const comment of comments) {
const migratedRecords = await trx('directus_activity')
.select('id')
.where('collection', '=', 'directus_comments')
.andWhere('item', '=', comment.id)
.andWhere('action', '=', Action.CREATE)
.limit(1);
if (migratedRecords[0]) {
await trx('directus_activity')
.update({
action: Action.COMMENT,
collection: comment.collection,
item: comment.item,
comment: comment.comment,
})
.where('id', '=', migratedRecords[0].id);
}
else {
await trx('directus_activity').insert({
action: Action.COMMENT,
collection: comment.collection,
item: comment.item,
comment: comment.comment,
user: comment.user_created,
timestamp: comment.date_created,
});
}
await trx('directus_comments').where('id', '=', comment.id).delete();
}
});
}
await knex.schema.dropTable('directus_comments');
}