Untitled

 avatar
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