Skip to content

Commit a508c2a

Browse files
committed
Refactor: optimize deletion logic in cleanupByCount and cleanupByTime methods for batch processing
1 parent 54500d0 commit a508c2a

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

index.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export default class AutoRemovePlugin extends AdminForthPlugin {
6363
console.error('AutoRemovePlugin runCleanup error:', err);
6464
}
6565
}
66-
66+
6767
private async cleanupByCount(adminforth: IAdminForth) {
6868
const limit = parseHumanNumber(this.options.keepAtLeast!);
6969
const resource = adminforth.resource(this.resource.resourceId);
@@ -72,10 +72,17 @@ export default class AutoRemovePlugin extends AdminForthPlugin {
7272
if (allRecords.length <= limit) return;
7373

7474
const toDelete = allRecords.slice(0, allRecords.length - limit);
75-
for (const r of toDelete) {
76-
await resource.delete(r[this.resource.columns.find(c => c.primaryKey)!.name]);
77-
console.log(`AutoRemovePlugin: deleted record ${r[this.resource.columns.find(c => c.primaryKey)!.name]} due to count-based limit`);
75+
76+
const itemsPerDelete = 100;
77+
78+
for (let i = 0; i < toDelete.length; i += itemsPerDelete) {
79+
const deletePackage = toDelete.slice(i, i + itemsPerDelete);
80+
await Promise.all(
81+
deletePackage.map(r => resource.delete(r[this.resource.columns.find(c => c.primaryKey)!.name]))
82+
);
7883
}
84+
85+
console.log(`AutoRemovePlugin: deleted ${toDelete.length} records due to count-based limit`);
7986
}
8087

8188
private async cleanupByTime(adminforth: IAdminForth) {
@@ -86,9 +93,18 @@ export default class AutoRemovePlugin extends AdminForthPlugin {
8693
const allRecords = await resource.list([], null, null, [Sorts.ASC(this.options.createdAtField)]);
8794
const toDelete = allRecords.filter(r => new Date(r[this.options.createdAtField]).getTime() < threshold);
8895

89-
for (const r of toDelete) {
90-
await resource.delete(r[this.resource.columns.find(c => c.primaryKey)!.name]);
91-
console.log(`AutoRemovePlugin: deleted record ${r[this.resource.columns.find(c => c.primaryKey)!.name]} due to time-based limit`);
96+
const itemsPerDelete = 100;
97+
98+
for (let i = 0; i < toDelete.length; i += itemsPerDelete) {
99+
const deletePackage = toDelete.slice(i, i + itemsPerDelete);
100+
101+
await Promise.all(
102+
deletePackage.map(r => resource.delete(r[this.resource.columns.find(c => c.primaryKey)!.name]))
103+
);
104+
105+
console.log(
106+
`AutoRemovePlugin: deleted ${deletePackage.length} records due to time-based limit`
107+
);
92108
}
93109
}
94110

0 commit comments

Comments
 (0)