POST /condition/new
This commit is contained in:
		
							
								
								
									
										57
									
								
								src/routes/validate/condition.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/routes/validate/condition.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
import Joi from '@hapi/joi';
 | 
			
		||||
 | 
			
		||||
import IdValidate from './id';
 | 
			
		||||
 | 
			
		||||
export default class ConditionValidate {
 | 
			
		||||
  private static condition = {
 | 
			
		||||
    sample_id: IdValidate.get(),
 | 
			
		||||
 | 
			
		||||
    number: Joi.string()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    parameters: Joi.object()
 | 
			
		||||
      .pattern(/.*/, Joi.alternatives()
 | 
			
		||||
        .try(
 | 
			
		||||
          Joi.string().max(128),
 | 
			
		||||
          Joi.number(),
 | 
			
		||||
          Joi.boolean()
 | 
			
		||||
        )
 | 
			
		||||
      ),
 | 
			
		||||
 | 
			
		||||
    treatment_template: IdValidate.get()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return Joi.object({
 | 
			
		||||
        sample_id: this.condition.sample_id.required(),
 | 
			
		||||
        number: this.condition.number.required(),
 | 
			
		||||
        parameters: this.condition.parameters.required(),
 | 
			
		||||
        treatment_template: this.condition.treatment_template.required()
 | 
			
		||||
      }).validate(data);
 | 
			
		||||
    }
 | 
			
		||||
    else if (param === 'change') {
 | 
			
		||||
      return Joi.object({
 | 
			
		||||
        sample_id: this.condition.sample_id,
 | 
			
		||||
        number: this.condition.number,
 | 
			
		||||
        parameters: this.condition.parameters,
 | 
			
		||||
        treatment_template: this.condition.treatment_template
 | 
			
		||||
      }).validate(data);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      return{error: 'No parameter specified!', value: {}};
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
      sample_id: this.condition.sample_id,
 | 
			
		||||
      number: this.condition.number,
 | 
			
		||||
      parameters: this.condition.parameters,
 | 
			
		||||
      treatment_template: this.condition.treatment_template
 | 
			
		||||
    }).validate(data, {stripUnknown: true});
 | 
			
		||||
    return error !== undefined? null : value;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								src/routes/validate/parameters.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/routes/validate/parameters.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
import Joi from '@hapi/joi';
 | 
			
		||||
 | 
			
		||||
export default class ParametersValidate {
 | 
			
		||||
  static input (data, parameters) {
 | 
			
		||||
    let joiObject = {};
 | 
			
		||||
    parameters.forEach(parameter => {
 | 
			
		||||
      if (parameter.range.hasOwnProperty('values')) {
 | 
			
		||||
        joiObject[parameter.name] = Joi.alternatives()
 | 
			
		||||
          .try(Joi.string(), Joi.number(), Joi.boolean())
 | 
			
		||||
          .valid(...parameter.range.values)
 | 
			
		||||
          .required();
 | 
			
		||||
      }
 | 
			
		||||
      else if (parameter.range.hasOwnProperty('min') && parameter.range.hasOwnProperty('max')) {
 | 
			
		||||
        joiObject[parameter.name] = Joi.number()
 | 
			
		||||
          .min(parameter.range.min)
 | 
			
		||||
          .max(parameter.range.max)
 | 
			
		||||
          .required();
 | 
			
		||||
      }
 | 
			
		||||
      else if (parameter.range.hasOwnProperty('min')) {
 | 
			
		||||
        joiObject[parameter.name] = Joi.number()
 | 
			
		||||
          .min(parameter.range.min)
 | 
			
		||||
          .required();
 | 
			
		||||
      }
 | 
			
		||||
      else if (parameter.range.hasOwnProperty('max')) {
 | 
			
		||||
        joiObject[parameter.name] = Joi.number()
 | 
			
		||||
          .max(parameter.range.max)
 | 
			
		||||
          .required();
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        joiObject[parameter.name] = Joi.alternatives()
 | 
			
		||||
          .try(Joi.string(), Joi.number(), Joi.boolean())
 | 
			
		||||
          .required();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    return Joi.object(joiObject).validate(data);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user