adonis-jsonapi
Advanced tools
Comparing version 0.5.4 to 0.6.0
{ | ||
"name": "adonis-jsonapi", | ||
"version": "0.5.4", | ||
"version": "0.6.0", | ||
"description": "A JSON API configuration for adonis-framework", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
'use strict'; | ||
const JsonApiSerializer = require('jsonapi-serializer').Serializer; | ||
const { JsonApiRequest, JsonApiError } = require('./JsonApiRequest'); | ||
const { JsonApiRequest, JsonApiError, ValidationError } = require('./JsonApiRequest'); | ||
@@ -41,4 +41,7 @@ function setupSerializer(use) { | ||
Response.macro('isJsonApiError', (err) => err instanceof JsonApiError); | ||
Response.macro('isValidationError', (err) => err instanceof ValidationError); | ||
Response.macro('jsonApiError', function (err) { | ||
if (err instanceof JsonApiError) { | ||
if (err instanceof ValidationError) { | ||
this.status(err.status).json({ errors: err.makeErrors() }); | ||
} else if (err instanceof JsonApiError) { | ||
this.status(err.status).json({ errors: [err.message] }); | ||
@@ -45,0 +48,0 @@ } else { |
@@ -5,2 +5,18 @@ const NE = require('node-exceptions'); | ||
class ValidationError extends NE.LogicalException { | ||
constructor(validator, status = 400) { | ||
super('', status); | ||
this.validator = validator; | ||
} | ||
makeErrors() { | ||
return this.validator.messages().map((err) => ({ | ||
status: this.status, | ||
source: { pointer: `/data/attributes/${err.field}` }, | ||
title: 'Invalid Attribute', | ||
detail: err.message, | ||
})); | ||
} | ||
} | ||
const pick = require('lodash.pick'); | ||
@@ -72,2 +88,11 @@ const mapKeys = require('lodash.mapkeys'); | ||
* assertValid(input, rules, messages) { | ||
const Validator = use('Validator'); | ||
const validation = yield Validator.validateAll(input, rules, messages); | ||
if (validation.fails()) { | ||
throw new ValidationError(validation); | ||
} | ||
} | ||
getRelationId(relationName) { | ||
@@ -91,2 +116,3 @@ try { | ||
JsonApiError, | ||
ValidationError, | ||
}; |
16397
216