app/src/validators/area.validator.js
const logger = require('logger');
const ErrorSerializer = require('serializers/error.serializer');
class AreaValidator {
static isObject(property) {
return property instanceof Object && property.length === undefined;
}
static notEmptyString(property) {
return typeof property === 'string' && property.length > 0;
}
static async create(ctx, next) {
logger.debug('Validating body for create area');
ctx.checkBody('name').notEmpty().len(1, 100);
ctx.checkBody('application').optional().check((application) => AreaValidator.notEmptyString(application), 'can not be empty');
ctx.checkBody('geostore').optional().isHexadecimal();
ctx.checkBody('wdpaid').optional().isInt().toInt();
ctx.checkBody('datasets').optional().isJSON();
ctx.checkBody('iso').optional().check((iso) => AreaValidator.isObject(iso), 'must be an object');
ctx.checkBody('use').optional().check((use) => AreaValidator.isObject(use), 'must be an object');
if (ctx.errors) {
logger.debug(`Area validation failed with error: ${JSON.stringify(ctx.errors)}`);
ctx.body = ErrorSerializer.serializeValidationBodyErrors(ctx.errors);
ctx.status = 400;
return;
}
await next();
}
static async update(ctx, next) {
logger.debug('Validating body for update area');
ctx.checkBody('name').optional().len(2, 100);
ctx.checkBody('application').optional().check((application) => AreaValidator.notEmptyString(application), 'can not be empty');
ctx.checkBody('geostore').optional().isHexadecimal();
ctx.checkBody('wdpaid').optional().isInt();
ctx.checkBody('datasets').optional().isJSON();
ctx.checkBody('iso').optional().check((iso) => AreaValidator.isObject(iso), 'must be an object');
ctx.checkBody('use').optional().check((use) => AreaValidator.isObject(use), 'must be an object');
ctx.checkBody('templateId').optional();
if (ctx.errors) {
ctx.body = ErrorSerializer.serializeValidationBodyErrors(ctx.errors);
ctx.status = 400;
return;
}
await next();
}
}
module.exports = AreaValidator;