Make deleteAllRecords accept contentTypes to delete rather than exceptions

This commit is contained in:
Bassel 2022-11-21 14:52:57 +02:00
parent 8a0db019bc
commit bba2c8a994
2 changed files with 35 additions and 27 deletions

View File

@ -87,9 +87,10 @@ class LocalFileSourceProvider implements ISourceProvider {
}
async getSchemas() {
const schemas = await collect(this.streamSchemas() as Readable);
// const schemas = await collect(this.streamSchemas() as Readable);
return keyBy('uid', schemas);
// return keyBy('uid', schemas);
return null;
}
streamEntities(): NodeJS.ReadableStream {

View File

@ -1,31 +1,38 @@
import type { ContentTypeSchema } from '@strapi/strapi';
const defaultExceptions = ['admin::permission', 'admin::user', 'admin::role', 'admin::api-token', 'admin::api-token-permission', 'plugin::i18n.locale']
export type DeleteOptions = {
exceptions?: string[],
contentTypes?: ContentTypeSchema[];
conditions?: {
[contentTypeUid: string]: {
where: any
}
}
}
where: any;
};
};
};
export const deleteAllRecords = async (strapi: Strapi.Strapi, deleteOptions?: DeleteOptions) => {
const conditions = deleteOptions?.conditions ?? {};
const exceptions = deleteOptions?.exceptions ?? defaultExceptions;
const contentTypes: ContentTypeSchema[] = Object.values(strapi.contentTypes);
const exceptions = [
'admin::permission',
'admin::user',
'admin::role',
'admin::api-token',
'admin::api-token-permission',
];
const allContentTypes: ContentTypeSchema[] = Object.values(strapi.contentTypes);
const defaultContentTypes: ContentTypeSchema[] = allContentTypes.filter(
(contentType) => !exceptions.includes(contentType.uid)
);
const contentTypes: ContentTypeSchema[] = deleteOptions?.contentTypes ?? defaultContentTypes;
let count = 0;
await Promise.all(contentTypes.map(async (contentType) => {
const filters = conditions[contentType.uid] ?? {}
if (!exceptions.includes(contentType.uid)) {
await Promise.all(
contentTypes.map(async (contentType) => {
const filters = conditions[contentType.uid] ?? {};
const result = await strapi?.db.query(contentType.uid).deleteMany({
filters
filters,
});
count += result.count;
}
}))
})
);
return { count }
}
return { count };
};