addQuery<R, Res extends BaseResponse> method

void addQuery<R, Res extends BaseResponse>(
  1. HttpContract<R, Res> contract,
  2. Future<Response> handler(
    1. QueryRequest<R>
    )
)

Implementation

void addQuery<R, Res extends http.BaseResponse>(
  HttpContract<R, Res> contract,
  Future<Response> Function(QueryRequest<R>) handler,
) {
  add(contract.method, contract.path, (Request shelfRequest) async {
    try {
      final contractRequest =
          await ShelfQueryRequest.fromShelfRequest<R, Res>(
              shelfRequest, contract);
      return await handler(contractRequest);
    } on ZardError catch (e) {
      return Response(400,
          body:
              jsonEncode({'errors': e.issues.map((i) => i.message).toList()}),
          headers: {'Content-Type': 'application/json'});
    } catch (e) {
      return Response.internalServerError(body: e.toString());
    }
  });
}