feat(changelog): wire up History tab to /changelog endpoint + diff modal
This commit is contained in:
@@ -482,3 +482,75 @@ export type WebhookTestPingResult = {
|
||||
latencyMs?: number | null
|
||||
message?: string | null
|
||||
}
|
||||
|
||||
// === Changelog (v2.4.0 + full timeline + diff) ===
|
||||
|
||||
/**
|
||||
* Frontend-friendly event kind. Backend mapping см.
|
||||
* ChangelogService.mapEventTypeToKind. Используем для icon/color/label
|
||||
* выбора в History tab. Versioning events
|
||||
* (definition_create / definition_update / draft_publish) показываются
|
||||
* с version label; promotional draft events идут без version.
|
||||
*/
|
||||
export type ChangelogKind =
|
||||
| 'definition_create'
|
||||
| 'definition_update'
|
||||
| 'draft_create'
|
||||
| 'draft_review'
|
||||
| 'draft_approve'
|
||||
| 'draft_reject'
|
||||
| 'draft_changes_requested'
|
||||
| 'draft_publish'
|
||||
| 'draft_withdraw'
|
||||
|
||||
export type ChangelogPublisher = {
|
||||
/** JWT sub claim (Keycloak user id). */
|
||||
sub: string
|
||||
/** Display name. Backend пока эхает sub; готовим место под user-resolve. */
|
||||
name: string
|
||||
}
|
||||
|
||||
export type ChangelogDiffSummary = {
|
||||
added: string[]
|
||||
removed: string[]
|
||||
changed: string[]
|
||||
}
|
||||
|
||||
export type ChangelogEntry = {
|
||||
/** audit_log.id — deep-link на diff endpoint. */
|
||||
id: number
|
||||
/** Semver. null для promotional draft events. */
|
||||
version: string | null
|
||||
publishedAt: string
|
||||
publishedBy: ChangelogPublisher
|
||||
/** Header summary text для card UI. */
|
||||
headers: string
|
||||
diff: ChangelogDiffSummary
|
||||
recordsAffected: number
|
||||
isCurrent: boolean
|
||||
kind: ChangelogKind
|
||||
}
|
||||
|
||||
export type ChangelogResponse = {
|
||||
dictionary: string
|
||||
currentVersion: string
|
||||
entries: ChangelogEntry[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Full before/after schemas для side-by-side render. before=null для
|
||||
* definition_create. Для draft_* (не publish) — after=proposed_schema,
|
||||
* before=live schema на момент event'а (то что предлагалось vs реальность).
|
||||
*/
|
||||
export type ChangelogDiff = {
|
||||
id: number
|
||||
dictionaryName: string
|
||||
/** Raw audit event_type (SCHEMA_UPDATED / SCHEMA_DRAFT_PUBLISHED / ...). */
|
||||
eventType: string
|
||||
kind: ChangelogKind
|
||||
occurredAt: string
|
||||
publishedBy: ChangelogPublisher
|
||||
before: unknown | null
|
||||
after: unknown | null
|
||||
summary: ChangelogDiffSummary
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user