@kdinisv

Как в Joi написать условия проверки вхождения хотябы одного конкретного значения в массиве?

Требуется проверить: если указан объект BU, то должен быть хотябы один объект PN со status == 1
{
   "BU":[
      {
         "businessName":"OOO Александров",
         "businessStatus":"0"
      }
   ],
   "PN":[
      {
         "number":"7777777",
         "status":1
      },
      {
         "number":"7777777",
         "status":2
      }
   ]
}
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
@kdinisv Автор вопроса
Удалось решить проблему. Приведу ниже решение

Joi.object({
  BU: Joi.array()
    .items(require("./BU"))
    .max(1),
  PN: Joi.array()
    .items(require("./PN"))
    .max(5)
}).when(
  Joi.object({
    BU: Joi.exist()
  }).unknown(),
  {
    then: Joi.object({
      PN: Joi.array()
        .required()
        .has(
          Joi.object({
            status: Joi.valid("1")
          })
        )
    })
  }
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
joeberetta
@joeberetta
Читай: https://epdf.pub/google-for-dummies.html
Вроде так. А так смотрите документацию: https://github.com/hapijs/joi/blob/v13.1.2/API.md#...
const schema = Joi.object().keys({
    BU: Joi.object().keys({
    	businessName: Joi.string(),
    	businessStatus: Joi.string(),
    }),
    PN: Joi.object()
        .keys({
            number: Joi.string(), // стоит поменять на number() судя по тому, что у вас приводится
            status: Joi.number().valid(1)
        })
        .required()
        .when('BU', {
            is: Joi.object(),
            then: Joi.object({ status: Joi.required() })
        })
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы