mirror of
https://github.com/directus/directus.git
synced 2026-02-14 23:35:00 -05:00
* Emit action events with updated schema * Fix collections service consistency * Pass action event upstream for createMany item * Pass action event upstream when processing payload * Skip unnecessary retrival of updated schema * Fix folder tests * Fields service consistency * Prevent duplicate cache clearing when deleting fields * Add tests_extensions_log table * Update collections crud tests * Add fields crud tests * Add action verify schema tests * Bypass system cache purge in relations service * Bypass system cache purge in nested field deletion * Update source for consistency when creating from collection
95 lines
3.0 KiB
JavaScript
95 lines
3.0 KiB
JavaScript
module.exports = function registerHooks({ action }) {
|
|
const logsCollection = 'tests_extensions_log';
|
|
|
|
action('collections.create', collectionsCallback);
|
|
action('collections.update', collectionsCallback);
|
|
action('collections.delete', collectionsCallback);
|
|
action('fields.create', fieldsCallback);
|
|
action('fields.update', fieldsCallback);
|
|
action('fields.delete', fieldsCallback);
|
|
|
|
async function collectionsCallback(data, { database, schema }) {
|
|
let key = 'action-verify-schema';
|
|
|
|
switch (data.event) {
|
|
case 'collections.create':
|
|
if (!data.key.startsWith('test_collections_crud')) break;
|
|
if (data.key.includes('folder')) break;
|
|
|
|
key += `/${data.key}/${data.event}`;
|
|
|
|
if (schema.collections[data.key]) {
|
|
await database(logsCollection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logsCollection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
case 'collections.update':
|
|
if (!data.keys[0].startsWith('test_collections_crud')) break;
|
|
|
|
key += `/${data.keys[0]}/${data.event}`;
|
|
|
|
if (data.payload.note === schema.collections[data.keys[0]].note) {
|
|
await database(logsCollection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logsCollection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
case 'collections.delete':
|
|
if (!data.payload[0].startsWith('test_collections_crud')) break;
|
|
|
|
key += `/${data.payload[0]}/${data.event}`;
|
|
|
|
if (!schema.collections[data.collection].fields[data.payload[0]]) {
|
|
await database(logsCollection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logsCollection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
async function fieldsCallback(data, { database, schema }) {
|
|
const logConnection = 'tests_extensions_log';
|
|
let key = 'action-verify-schema';
|
|
|
|
if (data.collection.startsWith('test_fields_crud')) {
|
|
switch (data.event) {
|
|
case 'fields.create':
|
|
if (data.key !== 'test_field') break;
|
|
|
|
key += `/${data.collection}/${data.event}/${data.key}`;
|
|
|
|
if (schema.collections[data.payload.collection].fields[data.payload.field]) {
|
|
await database(logConnection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logConnection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
case 'fields.update':
|
|
if (data.keys[0] !== 'test_field') break;
|
|
|
|
key += `/${data.collection}/${data.event}/${data.keys[0]}`;
|
|
|
|
if (data.payload.meta.note === schema.collections[data.collection].fields[data.keys[0]].note) {
|
|
await database(logConnection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logConnection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
case 'fields.delete':
|
|
if (data.payload[0] !== 'test_field') break;
|
|
|
|
key += `/${data.collection}/${data.event}/${data.payload[0]}`;
|
|
|
|
if (!schema.collections[data.collection].fields[data.payload[0]]) {
|
|
await database(logConnection).insert({ key, value: '1' });
|
|
} else {
|
|
await database(logConnection).insert({ key, value: '0' });
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
};
|