Untitled
unknown
plain_text
a year ago
2.6 kB
14
Indexable
const Joi = require('joi');
const { CoverCode } = require('./coverCodes'); // Assuming CoverCode is defined elsewhere
const CreateHomeFormSchema = Joi.object({
coverageDetails: Joi.object({
ownershipCode: Joi.number().valid(1, 2).required(),
nationalityCode: Joi.number().required(),
mandatoryCovers: Joi.array().items(
Joi.object({
coverCode: Joi.string().valid(CoverCode.CONTENTS, CoverCode.PERSONAL_POSESSIONS, CoverCode.BUILDING).required(),
coverIncluded: Joi.boolean().required(),
coverageLimit: Joi.number().required(),
coverageRange: Joi.string().optional()
})
).required().custom((value, helpers) => {
const { ownershipCode } = helpers.parent;
// Define expected covers based on ownershipCode
let expectedCovers;
switch (ownershipCode) {
case 1:
expectedCovers = [CoverCode.CONTENTS, CoverCode.PERSONAL_POSESSIONS, CoverCode.BUILDING];
if (value.length !== 3) {
return helpers.error('array.requiredLength', { length: 3 });
}
break;
case 2:
expectedCovers = [CoverCode.CONTENTS, CoverCode.PERSONAL_POSESSIONS];
if (value.length !== 2) {
return helpers.error('array.requiredLength', { length: 2 });
}
break;
default:
return helpers.error('any.unknown');
}
// Verify coverCode content
const actualCovers = value.map(item => item.coverCode);
if (!expectedCovers.every(code => actualCovers.includes(code))) {
return helpers.error('array.invalidContent', { expected: expectedCovers });
}
return value;
}, 'custom validation based on ownershipCode')
}).required()
}).unknown(true);
// Example usage:
const data = {
coverageDetails: {
ownershipCode: 1,
nationalityCode: 123,
mandatoryCovers: [
{ coverCode: CoverCode.CONTENTS, coverIncluded: true, coverageLimit: 10000 },
{ coverCode: CoverCode.PERSONAL_POSESSIONS, coverIncluded: true, coverageLimit: 5000 },
{ coverCode: CoverCode.BUILDING, coverIncluded: true, coverageLimit: 200000 }
]
}
};
const result = CreateHomeFormSchema.validate(data);
console.log(result);
Editor is loading...
Leave a Comment