start method

Future<ApiResult<HttpServer>> start({
  1. required String host,
  2. required int port,
  3. required List<BaseController> controllerList,
  4. 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,
    ));
  }
}