Joi - получить доступ к свойству объекта из первого элемента массива - PullRequest
1 голос
/ 26 марта 2020

У меня есть схема для проверки:

const schema2 = Joi.object({
    benefits: Joi.array().items(Joi.object({
        specification: Joi.object({
            type: Joi.string().valid("ORDER_FIXED_DISCOUNT", "UNIT_PERCENTAGE_DISCOUNT").required(),
        }).required()
    })).min(1).max(1).required(),
    offerCriteria: Joi.array().items(Joi.object({
        type: Joi.string().valid("CONTAINS_OFFERS").required(),
        offers: Joi.array().items(Joi.object({
            quantity: Joi.number().when(Joi.ref("....benefits.0.specification.type"), {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            }),
            promotionEntryPoint: Joi.boolean().when(Joi.ref("....benefits.0.specification.type"), {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            })
        })).min(1).required()
    })).min(1).max(1).required()
});

Моя цель - установить обязательные для offerCriteria.offers.quantity и offerCriteria.offers.quantitypromotionEntryPoint, если benefits.specification.type равно
ORDER_FIXED_DISCOUNT, в противном случае установлено запрещенное.

Я пробовал это, когда условия, но ни один из них не работал должным образом:

  • ".... benefits.specification.type",
  • "... .benefits.0.specification.type ",
  • Joi.ref (" .... benefits.0.specification.type "),
  • Joi.ref (" .... benefits.specification.type ")

1 Ответ

1 голос
/ 26 марта 2020

Я нашел способ решить эту проблему:

quantity: Joi.number().when("$specification_type", {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            }),

$specification_type устанавливается в контексте при проверке

schema.validate(data, {context: {specification_type: data.benefits[0].specification.type}}})

Я все еще ищу способ использования схема не контекстная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...