register method

  1. @override
void register()
override

Registers all service routes in HTTP endpoint.

Implementation

@override
void register() {
  var controller =
      dependencyResolver.getOneRequired<ICommandable>('controller');
  _commandSet = controller.getCommandSet();

  var commands = _commandSet?.getCommands() ?? [];
  for (var index = 0; index < commands.length; index++) {
    var command = commands[index];

    var route = command.getName();
    route = route[0] != '/' ? '/' + route : route;

    registerRoute('post', route, null, (Request req) async {
      var params = {};

      if (req.headers['Content-Type'] != null && req.headers.isNotEmpty) {
        var body = await req.readAsString();
        params = body.isNotEmpty ? json.decode(body) : {};
        req = req.change(body: body);
      }

      var correlationId = getCorrelationId(req);
      var args = Parameters.fromValue(params);
      var timing = instrument(
          correlationId, (baseRoute ?? '') + '.' + command.getName());
      try {
        var result = await command.execute(correlationId, args);
        timing.endTiming();
        return await sendResult(req, result);
      } catch (err) {
        instrumentError(
            correlationId, (baseRoute ?? '') + '.' + command.getName(), err);
        return await sendError(req, ApplicationException().wrap(err));
      }
    });
  }
  if (swaggerAuto) {
    var swaggerConfig = config!.getSection('swagger');

    var doc =
        CommandableSwaggerDocument(baseRoute ?? '', swaggerConfig, commands);
    registerOpenApiSpec_(doc.toString());
  }
}