Untitled
unknown
plain_text
a year ago
2.6 kB
9
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