feat(admin-ui): webhook event preview tab в DictionaryEditorDialog
CEO plan v1 polish — закрывает gap "Webhook preview при определении схемы".
Что добавлено:
- New tab "События" (4-й после Метаданные / Поля / JSON) в schema editor.
- Per-event sample JSON envelope для всех 5 event types которые fire'ят
на dict + records: RecordCreated, RecordUpdated, RecordDeleted,
DefinitionCreated, DefinitionUpdated.
- Sample data автогенерируется из schema property types:
string → "sample", integer → 42, number → 3.14, boolean → true,
array → [<sample>], object → recursive, x-localized → {ru-RU, en-US},
enum → first value, x-references → "REF-001", date/datetime → ISO.
- Topic name pattern shown: ordinis.{dict}.{scope.lower} для record events,
ordinis.definitions для definition events.
- Disclaimer что это client-side preview — реальный shape определяется
ordinis-events-api DTOs.
Helps integrators (Альтум, Геопортал, BI consumers) понять shape события
до того как dict published — без ожидания live event'а.
Files:
- src/components/schema/eventPreview.ts (new, ~155 LOC) — pure helper
- src/components/schema/EventsPreviewTab.tsx (new, ~70 LOC) — UI
- src/components/schema/DictionaryEditorDialog.tsx — +16 LOC, mount tab
- src/i18n.ts — schema.tabs.events + schema.events.{intro,topic,disclaimer}
RU + EN
Verify:
- pnpm tsc --noEmit: clean
- pnpm test (vitest): 89/89 PASS (4.34s)
- pnpm build: clean
This commit is contained in:
@@ -191,6 +191,10 @@ i18n
|
||||
'schema.tabs.metadata': 'Метаданные',
|
||||
'schema.tabs.schema': 'Поля',
|
||||
'schema.tabs.preview': 'JSON',
|
||||
'schema.tabs.events': 'События',
|
||||
'schema.events.intro': 'Превью JSON событий, которые будут опубликованы в Kafka после save справочника. Данные подставлены на основе типов полей schema. Полезно интеграторам (Альтум, Геопортал) для понимания shape\'а до live-выкатки.',
|
||||
'schema.events.topic': 'Topic',
|
||||
'schema.events.disclaimer': 'Это client-side preview. Реальные события содержат actual data + traceId/spanId из request scope. Schema events ordinis-events-api/src/main/java/.../events/ — единственный source of truth.',
|
||||
'schema.name': 'Имя',
|
||||
'schema.nameHint': 'snake_case, начинается с буквы (например my_dictionary)',
|
||||
'schema.nameInvalid': 'Только snake_case: a-z, 0-9, _; начинается с буквы',
|
||||
@@ -536,6 +540,10 @@ i18n
|
||||
'schema.tabs.metadata': 'Metadata',
|
||||
'schema.tabs.schema': 'Fields',
|
||||
'schema.tabs.preview': 'JSON',
|
||||
'schema.tabs.events': 'Events',
|
||||
'schema.events.intro': 'Preview of JSON events that will be published to Kafka after the dictionary is saved. Data is filled in based on schema field types. Useful for integrators (Altum, Geoportal) to understand the shape before going live.',
|
||||
'schema.events.topic': 'Topic',
|
||||
'schema.events.disclaimer': 'This is a client-side preview. Real events contain actual data + traceId/spanId from request scope. The events ordinis-events-api/src/main/java/.../events/ is the single source of truth.',
|
||||
'schema.name': 'Name',
|
||||
'schema.nameHint': 'snake_case, starts with letter (e.g. my_dictionary)',
|
||||
'schema.nameInvalid': 'Only snake_case: a-z, 0-9, _; must start with letter',
|
||||
|
||||
Reference in New Issue
Block a user