feat(api): Swagger UI + docs/integration для Альтума и других consumer'ов

Springdoc-openapi генерирует OpenAPI 3 spec из аннотаций контроллеров —
интеграторам не нужно поддерживать markdown-ТЗ синхронно с кодом.

- /swagger-ui.html (UI), /v3/api-docs (JSON), /v3/api-docs.yaml.
- OpenApiConfig: title/description/contact/servers (staging+prod+local),
  bearerAuth security scheme (Keycloak JWT).
- SecurityConfig: permitAll на swagger paths.

Документация:
- docs/integration/altum-imaging-order.md — ТЗ интеграции «Заказ съёмки».
  Согласованы: m2m service account через Keycloak, BFF в altum-backend
  (FastAPI), 4 справочника со схемами, cascading select через
  instrument.supported_*_codes, snapshot strategy для аудита.
- docs/tech/api-integration.md — общий гайд для интеграторов: auth flow,
  endpoints, кэш-стратегии, bitemporal модель, current dictionaries,
  cross-refs, best practices.

Скрипты codegen openapi-generator-cli работают off /v3/api-docs.
This commit is contained in:
Zimin A.N.
2026-05-04 15:45:09 +03:00
parent e284fa85be
commit 930df5b888
5 changed files with 580 additions and 0 deletions
@@ -42,6 +42,14 @@ public class SecurityConfig {
.authorizeHttpRequests(auth -> {
auth.requestMatchers("/actuator/**").permitAll();
auth.requestMatchers("/error").permitAll();
// Swagger UI + OpenAPI spec — открыты для интеграторов (Альтум, ...).
auth.requestMatchers(
"/swagger-ui.html",
"/swagger-ui/**",
"/v3/api-docs",
"/v3/api-docs/**",
"/v3/api-docs.yaml"
).permitAll();
if (props.requireAuthentication()) {
auth.anyRequest().authenticated();
} else {