import Joi from 'joi'; import IdValidate from './id'; export default class MeasurementValidate { private static measurement = { values: Joi.object() .pattern(/.*/, Joi.alternatives() .try( Joi.string().max(128), Joi.number(), Joi.boolean(), Joi.array() ) .allow(null) ) }; static input (data, param) { // validate input, set param to 'new' to make all attributes required if (param === 'new') { return Joi.object({ sample_id: IdValidate.get().required(), values: this.measurement.values.required(), measurement_template: IdValidate.get().required() }).validate(data); } else if (param === 'change') { return Joi.object({ values: this.measurement.values }).validate(data); } else { return{error: 'No parameter specified!', value: {}}; } } static output (data, req) { // validate output and strip unwanted properties, returns null if not valid data = IdValidate.stringify(data); // spectral data not allowed for read/write users if (['dev', 'admin'].indexOf(req.authDetails.level) < 0 && data.values.dpt) { delete data.values.dpt; } const {value, error} = Joi.object({ _id: IdValidate.get(), sample_id: IdValidate.get(), values: this.measurement.values, measurement_template: IdValidate.get() }).validate(data, {stripUnknown: true}); return error !== undefined? null : value; } static outputV() { // return output validator return Joi.object({ _id: IdValidate.get(), sample_id: IdValidate.get(), values: this.measurement.values, measurement_template: IdValidate.get() }); } }