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