Skip to content

Commit 1843641

Browse files
committed
fix: resolve copilot comment
1 parent d6502d3 commit 1843641

File tree

5 files changed

+24
-20
lines changed

5 files changed

+24
-20
lines changed

adminforth/dataConnectors/mysql.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ class MysqlConnector extends AdminForthBaseConnector implements IAdminForthDataS
9696
childTable: fk.child_table
9797
};
9898
if (fkMap[fk.column_name].cascade) {
99-
afLogger.warn(`The database has ON DELETE CASCADE, which may conflict with adminForth cascade deletion and upload logic. Please remove it.`); }
99+
afLogger.warn(`The database has ON DELETE CASCADE, which may conflict with adminForth cascade deletion and upload logic. Please remove it.`);
100100
}
101+
}
101102
const fieldTypes = {};
102103
results.forEach((row) => {
103104
const field: any = {};

adminforth/dataConnectors/postgres.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ class PostgresConnector extends AdminForthBaseConnector implements IAdminForthDa
110110
const tableName = resource.table;
111111
const fkMap = await this.getPgFkCascadeMap(tableName);
112112
const hasCascade = Object.values(fkMap).some(fk => fk.cascade);
113-
const cascadeWarningShownMap: Record<string, boolean> = {};
114-
if (hasCascade && !cascadeWarningShownMap[tableName]) {
113+
if (hasCascade) {
115114
afLogger.warn(`The database has ON DELETE CASCADE, which may conflict with adminForth cascade deletion and upload logic. Please remove it.`);
116115
}
117116
const stmt = await this.client.query(`

adminforth/modules/configValidator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ export default class ConfigValidator implements IConfigValidator {
621621

622622
if (col.foreignResource) {
623623
if (col.foreignResource.onDelete && (col.foreignResource.onDelete !== 'cascade' && col.foreignResource.onDelete !== 'setNull')){
624-
errors.push (`Wrong delete strategy you can use 'setNull' or 'cascade'`);
624+
errors.push (`Resource "${res.resourceId}" column "${col.name}" has wrong delete strategy, you can use 'setNull' or 'cascade'`);
625625
}
626626
if (!col.foreignResource.resourceId) {
627627
// resourceId is absent or empty

adminforth/modules/restApi.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,38 +1467,42 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
14671467
if (!resource.options.allowedActions.delete) {
14681468
return { error: `Resource '${resource.resourceId}' does not allow delete action` };
14691469
}
1470+
1471+
const { allowedActions } = await interpretResource(
1472+
adminUser,
1473+
resource,
1474+
{ requestBody: body, record: record },
1475+
ActionCheckSource.DeleteRequest,
1476+
this.adminforth
1477+
);
1478+
1479+
const { allowed, error } = checkAccess(AllowedActionsEnum.delete, allowedActions);
1480+
if (!allowed) {
1481+
return { error };
1482+
}
1483+
14701484
const childResources = this.adminforth.config.resources.filter(r => r.columns.some(c => c.foreignResource?.resourceId === resource.resourceId));
14711485
if (childResources.length){
14721486
for (const childRes of childResources) {
14731487
const foreignResourceColumn = childRes.columns.find(c => c.foreignResource?.resourceId === resource.resourceId);
14741488
if (!foreignResourceColumn.foreignResource.onDelete) continue;
14751489
const onDeleteStrategy = foreignResourceColumn.foreignResource.onDelete;
14761490
const childRecords = await this.adminforth.resource(childRes.resourceId).list(Filters.EQ(foreignResourceColumn.name, body['primaryKey']))
1491+
const childPkColumn = childRes.columns.find(col => col.primaryKey);
1492+
if (!childPkColumn) continue;
1493+
const childPkFieldName = childPkColumn.name;
14771494
if (onDeleteStrategy === 'cascade') {
14781495
for (const childRecord of childRecords) {
1479-
await this.adminforth.resource(childRes.resourceId).delete(childRecord.id);
1496+
await this.adminforth.resource(childRes.resourceId).delete(childRecord[childPkFieldName]);
14801497
}
14811498
} else if (onDeleteStrategy === 'setNull') {
14821499
for (const childRecord of childRecords) {
1483-
await this.adminforth.resource(childRes.resourceId).update(childRecord.id, {[foreignResourceColumn.name]: null});
1500+
await this.adminforth.resource(childRes.resourceId).update(childRecord[childPkFieldName], {[foreignResourceColumn.name]: null});
14841501
}
14851502
}
14861503
}
14871504
}
14881505

1489-
const { allowedActions } = await interpretResource(
1490-
adminUser,
1491-
resource,
1492-
{ requestBody: body, record: record },
1493-
ActionCheckSource.DeleteRequest,
1494-
this.adminforth
1495-
);
1496-
1497-
const { allowed, error } = checkAccess(AllowedActionsEnum.delete, allowedActions);
1498-
if (!allowed) {
1499-
return { error };
1500-
}
1501-
15021506
const { error: deleteError } = await this.adminforth.deleteResourceRecord({
15031507
resource, record, adminUser, recordId: body['primaryKey'], response,
15041508
extra: { body, query, headers, cookies, requestUrl, response }

adminforth/types/Back.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2037,7 +2037,7 @@ export interface AdminForthForeignResource extends AdminForthForeignResourceComm
20372037
afterDatasourceResponse?: AfterDataSourceResponseFunction | Array<AfterDataSourceResponseFunction>,
20382038
},
20392039
},
2040-
onDelete: 'cascade' | 'setNull'
2040+
onDelete?: 'cascade' | 'setNull'
20412041
}
20422042

20432043
export type ShowInModernInput = {

0 commit comments

Comments
 (0)