Є довідник адрес. Зв'язок вулиця-район не скрізь присутній (опціональне поле cityDistrictId). Але при цьому користувач заповнює заяву, надаючи повну ієрархію (місто, район, вулиця). Сервер у випадках відсутності цього зв'язку не може провалідувати чи дійсно ця вулиця належить саме цьому району, але зберігає її.
Далі імітується перевірка заяви і встановлення її статусу. Кожен статус має свою вагу. Наприклад, статус done може свідчити, що вибрана користувачем ієрархія є правильна, тому вага буде найбільшою. Але може бути помилка, наприклад notRelevant, тому вага буде меншою. А ось статус wrongAddress чітко визначає, що ієрархія неправильна, тому вага має бути 0.
Підкреслюємо, що статуси та таблиця вагів задаються окремо, тобто є динамічними.
Далі йде розрахунок заяв за формулою, і якщо поріг пройдений, зв'язок визначається як правильний і додається в довідник.
Довідник адрес з наступною json-структурою:
Cities
[
  {
     "id": "string"
  }
]
City districts
[
  {
     "id": "string",
     "parentId": "cityId"
  }
]
Streets
[
  {
     "id": "string",
     "parentId": "cityId",
     "cityDistrictId": "string"
  }
]
У наборі вулиць поле cityDistrictId є опціональним
Реалізувати API запит створення заяви, валідуючи правильність заповнения адреси згідно з довідником:
POST api/application
request:
{
  "address": {
      "cityId": "string",
      "cityDistrictId": "string",
      "streetId": "string"
   }
}
response:
{
   "applicationId": "string"
}
Реалізувати API запит оновлення статусу заяви:
POST api/application/:id
request:
{
  "status": "string"
}
Реалізувати доповнення довідника вулиць ідентифікаторами районів за наступною схемою: якщо розрахункове значення (x)  заяв з однаковою вулицею та районом більше за встановлений поріг (t), то доповнити вулицю з довідника ідентифікатором району заяв.
Розрахункове значення (x) визначається наступним чином:
n – кількість заяв,
w – "вага" заяви, котра обирається з таблиці такого виду:
status
weight
done
...
1
...
Поріг (t)  задається окремим API запитом:
POST api/threshold
request:
{
  "value": 5
}
Таблиця ваг задається откремим API запитом:
POST api/weights
request:
{
  "{status}": 10,
   ...
}
При зміні порогу або таблиці ваг, визначені доповнення довідника повинні інвалідуватися.
Рішення має бути масштабованим.
Загальна максимальна набрана сума балів — 10
Бали розподіляються за критеріями:
  • Робота під навантаженням та з великим об'ємом даних: 4
  • Коректність: 4
  • Якість коду: 1
  • Інтеграційні тести: 1