start method
- required String host,
- required int port,
- required List<
BaseController> controllerList, - Router? additionalRoutes,
Starts the server with automatic controller registration.
Implementation
Future<ApiResult<HttpServer>> start({
required String host,
required int port,
required List<BaseController> controllerList,
Router? additionalRoutes,
}) async {
try {
Log.i('Starting secure API server on $host:$port');
Log.i('Registering ${controllerList.length} controllers...');
// Create main router
final mainRouter = Router();
// Register each controller automatically with JWT validation
for (final controller in controllerList) {
await _registerControllerWithJWT(mainRouter, controller);
}
// Add additional routes if provided
if (additionalRoutes != null) {
mainRouter.mount('/', additionalRoutes);
}
// Health check endpoint is optional - controllers can provide their own
// mainRouter.get('/health', (Request request) {
// return Response.ok('{"status": "healthy", "timestamp": "${DateTime.now().toIso8601String()}"}',
// headers: {'content-type': 'application/json'});
// });
final handler = pipeline.addHandler(mainRouter.call);
final server = await io.serve(handler, host, port);
Log.i('Server started successfully with ${controllerList.length} controllers');
Log.i('Controllers registered with their respective endpoints');
return ApiResult.ok(server);
} catch (e, stackTrace) {
Log.e('Failed to start server: $e');
return ApiResult.err(ApiErr(
title: 'Server Start Failed',
msm: 'Failed to start server: $e',
exception: e,
stackTrace: stackTrace,
));
}
}