handle method

  1. @override
Future<Response> handle(
  1. Request request
)

Implementation

@override
Future<Response> handle(Request request) async {
  _validate(request);
  final target = _matchTarget(request.uri);
  if (target is RelationshipTarget) {
    if (request.method.equals('GET')) {
      return await _controller.fetchRelationship(request, target);
    }
    if (request.method.equals('POST')) {
      return await _controller.addMany(request, target);
    }
    if (request.method.equals('PATCH')) {
      return await _controller.replaceRelationship(request, target);
    }
    if (request.method.equals('DELETE')) {
      return await _controller.deleteMany(request, target);
    }
    throw MethodNotAllowed(request.method.value);
  }
  if (target is RelatedTarget) {
    if (request.method.equals('GET')) {
      return await _controller.fetchRelated(request, target);
    }
    throw MethodNotAllowed(request.method.value);
  }
  if (target is ResourceTarget) {
    if (request.method.equals('GET')) {
      return await _controller.fetchResource(request, target);
    }
    if (request.method.equals('PATCH')) {
      return await _controller.updateResource(request, target);
    }
    if (request.method.equals('DELETE')) {
      return await _controller.deleteResource(request, target);
    }
    throw MethodNotAllowed(request.method.value);
  }
  if (target is Target) {
    if (request.method.equals('GET')) {
      return await _controller.fetchCollection(request, target);
    }
    if (request.method.equals('POST')) {
      return await _controller.createResource(request, target);
    }
    throw MethodNotAllowed(request.method.value);
  }
  throw UnmatchedTarget(request.uri);
}