Skip to content

Commit e516db7

Browse files
author
VuXfi
committed
fix: enhance type safety for controller functions in admin panel routing
1 parent b2b0154 commit e516db7

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/interfaces/adminpanelConfig.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import {Adminizer} from "lib/Adminizer";
66
import {GroupAP} from "models/GroupAP";
77
import {UserAP} from "models/UserAP";
88

9+
/**
10+
* Controller function type - async function that handles requests and returns a response
11+
*/
12+
export type ControllerFunction = (req: ReqType, res: ResType) => Promise<any>
13+
914
export type AdminpanelIcon = MaterialIcon
1015
export type FieldsTypes =
1116
"string" |
@@ -518,7 +523,7 @@ export interface CreateUpdateConfig {
518523
* You can change standard controller for any entity by this property
519524
* Can be either a string path (for dynamic import) or a controller function
520525
* */
521-
controller?: string | ((req: ReqType, res: ResType) => Promise<any>)
526+
controller?: string | ControllerFunction
522527
}
523528

524529
export interface HrefConfig {

src/system/Router.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ export default class Router {
199199
let controller = await import(addHandler.controller);
200200
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, controller.default));
201201
} else {
202-
// Direct function reference
203-
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, addHandler.controller));
202+
// Direct function reference (controller function matches middleware signature)
203+
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, addHandler.controller as any));
204204
}
205205
} else {
206206
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, _add));
@@ -219,8 +219,8 @@ export default class Router {
219219
let controller = await import(editHandler.controller);
220220
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, controller.default));
221221
} else {
222-
// Direct function reference
223-
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, editHandler.controller));
222+
// Direct function reference (controller function matches middleware signature)
223+
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, editHandler.controller as any));
224224
}
225225
} else {
226226
adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, _edit));

0 commit comments

Comments
 (0)