refactored user.ts
This commit is contained in:
		@@ -18,7 +18,7 @@ export default class ConditionValidate {
 | 
			
		||||
      )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {
 | 
			
		||||
  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(),
 | 
			
		||||
@@ -36,7 +36,7 @@ export default class ConditionValidate {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -3,11 +3,11 @@ import Joi from '@hapi/joi';
 | 
			
		||||
export default class IdValidate {
 | 
			
		||||
  private static id = Joi.string().pattern(new RegExp('[0-9a-f]{24}')).length(24);
 | 
			
		||||
 | 
			
		||||
  static get () {
 | 
			
		||||
  static get () {  // return joi validation
 | 
			
		||||
    return this.id;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static valid (id) {
 | 
			
		||||
  static valid (id) {  // validate id
 | 
			
		||||
    return this.id.validate(id).error === undefined;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -15,11 +15,14 @@ export default class IdValidate {
 | 
			
		||||
    return ':id([0-9a-f]{24})';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static stringify (data) {
 | 
			
		||||
  static stringify (data) {  // convert all ObjectID objects to plain strings
 | 
			
		||||
    Object.keys(data).forEach(key => {
 | 
			
		||||
      if (data[key] !== null && data[key].hasOwnProperty('_bsontype') && data[key]._bsontype === 'ObjectID') {
 | 
			
		||||
      if (data[key] !== null && data[key].hasOwnProperty('_bsontype') && data[key]._bsontype === 'ObjectID') {  // stringify id
 | 
			
		||||
        data[key] = data[key].toString();
 | 
			
		||||
      }
 | 
			
		||||
      else if (typeof data[key] === 'object' && data[key] !== null) {  // deeper into recursion
 | 
			
		||||
        data[key] = this.stringify(data[key]);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ export default class MaterialValidate {  // validate input for material
 | 
			
		||||
      }))
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {  // validate data, param: new(everything required)/change(available attributes are validated)
 | 
			
		||||
  static input (data, param) {  // validate input, set param to 'new' to make all attributes required
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return joi.object({
 | 
			
		||||
        name: this.material.name.required(),
 | 
			
		||||
@@ -68,7 +68,7 @@ export default class MaterialValidate {  // validate input for material
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {  // validate output from database for needed properties, strip everything else
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ export default class MeasurementValidate {
 | 
			
		||||
      )
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {
 | 
			
		||||
  static input (data, param) {  // validate input, set param to 'new' to make all attributes required
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return Joi.object({
 | 
			
		||||
        condition_id: IdValidate.get().required(),
 | 
			
		||||
@@ -33,7 +33,7 @@ export default class MeasurementValidate {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ export default class NoteFieldValidate {
 | 
			
		||||
    qty: Joi.number()
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static output (data) {
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      name: this.note_field.name,
 | 
			
		||||
      qty: this.note_field.qty
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ export default class ParametersValidate {
 | 
			
		||||
  static input (data, parameters, param) {  // data to validate, parameters from template, param: 'new', 'change'
 | 
			
		||||
    let joiObject = {};
 | 
			
		||||
    parameters.forEach(parameter => {
 | 
			
		||||
      if (parameter.range.hasOwnProperty('values')) {
 | 
			
		||||
      if (parameter.range.hasOwnProperty('values')) {  // append right validation method according to parameter
 | 
			
		||||
        joiObject[parameter.name] = Joi.alternatives()
 | 
			
		||||
          .try(Joi.string().max(128), Joi.number(), Joi.boolean())
 | 
			
		||||
          .valid(...parameter.range.values);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
// respond with 400 and include error details from the joi validation
 | 
			
		||||
 | 
			
		||||
export default function res400 (error, res) {
 | 
			
		||||
  res.status(400).json({status: 'Invalid body format', details: error.details[0].message});
 | 
			
		||||
}
 | 
			
		||||
@@ -41,7 +41,7 @@ export default class SampleValidate {
 | 
			
		||||
    })
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {  // validate data, param: new(everything required)/change(available attributes are validated)
 | 
			
		||||
  static input (data, param) {  // validate input, set param to 'new' to make all attributes required
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return Joi.object({
 | 
			
		||||
        color: this.sample.color.required(),
 | 
			
		||||
@@ -65,7 +65,7 @@ export default class SampleValidate {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ export default class TemplateValidate {
 | 
			
		||||
      )
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static input (data, param, template) {  // validate data, param: new(everything required)/change(available attributes are validated)
 | 
			
		||||
  static input (data, param, template) {  // validate input, set param to 'new' to make all attributes required
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      if (template === 'treatment') {
 | 
			
		||||
        return Joi.object({
 | 
			
		||||
@@ -79,10 +79,10 @@ export default class TemplateValidate {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data, template) {  // validate output from database for needed properties, strip everything else
 | 
			
		||||
  static output (data, template) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    let joiObject;
 | 
			
		||||
    if (template === 'treatment') {
 | 
			
		||||
    if (template === 'treatment') {  // differentiate between measurement and treatment (has number_prefix) template
 | 
			
		||||
      joiObject = {
 | 
			
		||||
        _id: IdValidate.get(),
 | 
			
		||||
        name: this.template.name,
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ export default class UserValidate {  // validate input for user
 | 
			
		||||
 | 
			
		||||
  private static specialUsernames = ['admin', 'user', 'key', 'new', 'passreset'];  // names a user cannot take
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {
 | 
			
		||||
  static input (data, param) {  // validate input, set param to 'new' to make all attributes required
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return Joi.object({
 | 
			
		||||
        name: this.user.name.required(),
 | 
			
		||||
@@ -68,7 +68,7 @@ export default class UserValidate {  // validate input for user
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {  // validate output from database for needed properties, strip everything else
 | 
			
		||||
  static output (data) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user