В списке адресов префикса подряд идущие свободные адреса сворачиваются в строку «начало – конец · Свободно: N» (параметр group_free, группировка на сервере — пагинация по строкам после свёртки); раскрытие — существующим status=free&offset=free_offset порциями по 500. Без group_free ответ API прежний. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
2.7 KiB
Markdown
22 lines
2.7 KiB
Markdown
# Итог: свёртка свободных адресов в раскрывающиеся диапазоны (изменение 042)
|
||
|
||
План: `PLAN.md`. В списке адресов префикса подряд идущие свободные адреса сворачиваются в строку-диапазон
|
||
«начало – конец · Свободно: N»; клик раскрывает её в отдельные адреса, повторный — сворачивает. Одиночный свободный адрес — обычная строка.
|
||
|
||
## Что сделано
|
||
| Файл | Изменение |
|
||
|---|---|
|
||
| `app/api/v1/prefixes.py` | `list_addresses(group_free=False)`: в смешанном режиме (без фильтра и поиска, подсеть ≤ `FREE_LISTING_LIMIT`) серии свободных ≥ 2 сворачиваются одним проходом по отсортированному списку в строку `free_range`. `total` и пагинация — по строкам после свёртки. Без `group_free` ответ прежний |
|
||
| `app/schemas.py` | `AddressOut.range_end`, `range_count`, `free_offset` |
|
||
| `web/app.js` | Список запрашивается с `group_free`. Строка диапазона: шеврон как в дереве префиксов, бейдж «Свободно: N», без чекбокса и действий. Раскрытие — существующий `status=free&offset=free_offset`, порциями по 500 со строкой «ещё N — показать». Состояние в `S.freeOpen`/`S.freeLoaded`, сброс при смене фильтра, поиска или префикса. Подсказка адреса в «Назначить адрес» учитывает `free_range` |
|
||
| `tests/test_api.py` | В `test_tree_utilization_and_next_free`: `free_range` с корректными границами и `free_offset`; раскрытие даёт ровно адреса диапазона; без `group_free` ответ не изменился |
|
||
| `README.md` | Свёртка свободных адресов; строка 042 |
|
||
|
||
## Проверки
|
||
- `pytest -q` — 17 passed.
|
||
- На стенде (временная организация, удалена):
|
||
- `10.242.0.0/24` с 3 назначенными — 5 строк вместо 254;
|
||
- `fd00:242::/120` с 3 назначенными — 5 строк вместо 256;
|
||
- раскрытие каждого диапазона через `status=free&offset&limit` совпадает по первому и последнему адресу и количеству.
|
||
- UI — проверка пользователя.
|