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