applyRoutes method

Future<String> applyRoutes(
  1. Router<RequestHandler> router,
  2. Reflector reflector
)
inherited

Applies the routes from this Controller to some router.

When reflection is disabled (see canReflect), only the routes added in configureRoutes are applied; @Expose methods are not discovered.

Implementation

Future<String> applyRoutes(
  Router<RequestHandler> router,
  Reflector reflector,
) async {
  // Load global expose decl
  var exposeDecl = findExpose(reflector);

  if (exposeDecl == null) {
    throw Exception('All controllers must carry an @Expose() declaration.');
  }

  var routable = Routable();
  _mountPoint = router.mount(exposeDecl.path, routable);
  await configureRoutes(routable);

  String name;
  if (canReflect(reflector)) {
    // Pre-reflect methods
    var classMirror = reflector.reflectClass(runtimeType)!;
    var instanceMirror = reflector.reflectInstance(this);
    final handlers = <RequestHandler>[
      ...exposeDecl.middleware,
      ...middleware,
    ];
    classMirror.declarations.forEach(
      _routeBuilder(reflector, instanceMirror, routable, handlers),
    );
    name = reflector.reflectType(runtimeType)!.name;
  } else {
    name = runtimeType.toString();
  }

  // Return the name.
  return exposeDecl.as?.isNotEmpty == true ? exposeDecl.as! : name;
}