...
Необхідно реалізувати підтримку query-параметрів у GET /api/procedures/{sellingMethod}/auctionPeriod
Мета зміни
Розширити ендпоінт GET /api/procedures/{sellingMethod}/auctionPeriod, щоб він міг обчислювати min/max дати з урахуванням параметрів конкретного кейсу, переданих у query-string (наприклад: isPerishable, value.amount), а не лише базової validation.min/max.
...
conditions[] наразі не параметризовані і не залежать від введених даних користувача (бо немає механізму передати ці дані у запит)
Нова поведінка (to-be)
Підтримка query параметрів
Ендпоінт має приймати query параметри, які будуть використані при визначенні релевантного condition.case та/або правил validation
...
Якщо sellingMethod не має conditions[] для auctionPeriod.startDate — query параметри не впливають (результат як зараз)
Правила вибору умов
...
Загальна логіка
Система завантажує конфіг для {sellingMethod}
Якщо в startDate є масив conditions[], система має:
пройтись по conditions[] у вказаному у відповіді порядку
знайти першу умову, у якої case повністю матчиться із параметрами запиту
застосувати її правила розрахунку дат
Якщо жоден case не матчиться — використовується дефолтна логіка з startDate.validation (як зараз)
...
перевизначати validation.min/max локально для цього кейсу
Тобто дозволити реалізмція має дозволти робити один із варіантів:
Варіант А: condition має власні поля diff/from/... і повертає тільки minDate (або min+max, якщо є).
Варіант Б: condition містить вкладений validation і повністю замінює дефолтний startDate.validation для обчислення min/max.
...
Boolean
isPerishable=true|false (case-insensitive)
якщо параметр переданий не як boolean → 400 помилка
Числовий value.amount
value.amount— decimalякщо не число → 400 помилка
Правила пріоритетів
Якщо знайдено condition, який матчиться, і він містить власний validation — використати його
Якщо condition матчиться і він задає пряме правило diff/from/time — розрахувати min/max на його основі
Якщо condition не матчиться — використати дефолтний startDate.validation (поточна поведінка)
Якщо матчиться кілька conditions :- використати перший у списку (тобто порядок у конфігу = пріоритет)
Відповідь ендпоінта (без змін)
...
| Code Block |
|---|
{
"startDate": {
"minDate": "...",
"maxDate": "..."
}
} |
Помилки / валідації
Некоректні значення в query
...
параметрі - 400 Bad Request
Приклад причин:
isPerishable = abc
value.amount = not_a_number
Невідомий sellingMethod
як зараз - 422 Unprocessable Content
Непідтримуваний параметр
Lenient: невідомі параметри ігноруються (щоб не ламати майданчики)
...