pcp-tgu-service: толерантность времени на Jackson-3 пути (REST-кодеки WebFlux)

This commit is contained in:
Дмитрий Соловьев
2026-06-02 22:57:49 +03:00
parent 84e70350b9
commit cde4ffa9b6
5 changed files with 192 additions and 10 deletions
+21 -9
View File
@@ -67,11 +67,15 @@
**Особый случай — pcp-tgu-service.** Он не зависит от pcp-types-lib и работает на WebFlux
(подключение либы притянуло бы `spring-boot-starter-web`/MVC и переключило тип приложения на
сервлетный). Поэтому в tgu лежит **локальное зеркало** `config/PcpTimeModule.kt` (поведение обязано
совпадать с библиотечным), зарегистрированное в Jackson-2 бине `CamundaJacksonConfig` — покрывает
Camunda/внутренний парсинг. Остаётся под-задача: REST-codec WebFlux на **Jackson 3**
(`tools.jackson.*`, иной API) ещё не толерантен — нужен Jackson-3 вариант модуля + регистрация в
кодеках.
сервлетный). Поэтому в tgu лежат **два локальных зеркала** (поведение обязано совпадать с
библиотечным, правки синхронизировать), покрывающих обе Jackson-среды сервиса:
- `config/PcpTimeModule.kt` (Jackson 2) — зарегистрирован в `CamundaJacksonConfig`, покрывает
Camunda/внутренний парсинг;
- `config/PcpTimeModuleV3.kt` (**Jackson 3**, `tools.jackson.*`) — REST-кодеки WebFlux, которые
Boot 4 авто-конфигурирует на Jackson 3 `JsonMapper`. Регистрируется бином
`tools.jackson.databind.JacksonModule` (`WebFluxJacksonConfig`); `JacksonAutoConfiguration`
собирает все такие бины в общий `JsonMapper` (`builder.addModules(...)`). Тем самым входящий
REST-JSON tgu тоже читается толерантно к обоим форматам.
Контракт слоя закреплён `PcpTimeModuleTest` (pcp-types-lib): оба формата → один и тот же UTC-момент,
плюс проверка авто-подхвата через SPI.
@@ -135,8 +139,9 @@ mission-planing) используют тот же дефолтный Jackson-к
синхронно; фронт `parseUtc` совместим. Контракт закреплён тестами выше.
- **Слой толерантности (`PcpTimeModule`) — раскатан по флоту.** 12 сервисов на pcp-types-lib
получают его авто-конфигурацией/SPI; dynamic-plan — точечно; tgu — локальным зеркалом (Jackson-2
путь). Это включатель: дальнейший флип продюсеров на `Z` больше не требует синхронного деплоя.
получают его авто-конфигурацией/SPI; dynamic-plan — точечно; tgu — двумя локальными зеркалами
(Jackson-2 для Camunda и Jackson-3 для REST-кодеков WebFlux). Это включатель: дальнейший флип
продюсеров на `Z` больше не требует синхронного деплоя.
После толерантности продюсеров можно флипать **в любом порядке**. Кандидаты: остальные naive-DTO
ui-service, ballistics, complex-mission, dynamic-plan, slots, coverage-scheme.
@@ -150,10 +155,17 @@ ui-service, ballistics, complex-mission, dynamic-plan, slots, coverage-scheme.
`…+00:00`. **Инстант не изменился** (тот же момент), но стенные часы теперь совпадают с UTC, поэтому
потребитель, дропающий зону, получает корректное время. Закреплено `LocalDateTimeTimeZoneSerializerTest`.
### Исправленные баги формата
- **pcp-tgu-service REST-codec на Jackson 3** — теперь толерантен (см. 2bis). Добавлен Jackson-3
вариант модуля `config/PcpTimeModuleV3.kt` и его регистрация бином `JacksonModule`
(`config/WebFluxJacksonConfig.kt`); входящий REST-JSON WebFlux читается в обоих форматах
(naive=UTC и `Z`). Закреплено `PcpTimeModuleV3Test`.
### Остаток (под-задачи)
- **pcp-tgu-service REST-codec на Jackson 3** — ещё не толерантен (см. 2bis); под-задача на Jackson-3
вариант модуля + регистрация в кодеках WebFlux.
- Обе Jackson-среды tgu теперь толерантны; отдельных остатков по чтению времени нет. При миграции
оставшихся продьюсеров на `Z` (раздел 4) добавлять сериализационные тесты контракта.
## 5. Правило для нового кода