From 0752b3acd606e9d78f86aaa94613d62bfc21eaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B8=D0=BC=D0=B8=D0=BD?= Date: Sun, 3 May 2026 23:38:52 +0300 Subject: [PATCH] fix(cuod-bundle): seed records for existing definitions too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Importer бросал early-return для уже существующих definitions, поэтому records никогда не наполнялись на повторных стартах. Records seed теперь вызывается всегда (idempotent — skip по businessKey). --- .../ordinis/cuod/CuodBundleImporter.java | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/ordinis-cuod-bundle/src/main/java/cloud/nstart/terravault/ordinis/cuod/CuodBundleImporter.java b/ordinis-cuod-bundle/src/main/java/cloud/nstart/terravault/ordinis/cuod/CuodBundleImporter.java index 5bb32d6..b1dafe9 100644 --- a/ordinis-cuod-bundle/src/main/java/cloud/nstart/terravault/ordinis/cuod/CuodBundleImporter.java +++ b/ordinis-cuod-bundle/src/main/java/cloud/nstart/terravault/ordinis/cuod/CuodBundleImporter.java @@ -103,35 +103,34 @@ public class CuodBundleImporter { Optional existing = repository.findByName(entry.name()); if (existing.isPresent()) { DictionaryDefinition def = existing.get(); - if (!props.updateExistingSchema()) { - log.debug("Справочник '{}' уже существует, update_existing_schema=false — пропускаем", entry.name()); - return; - } - if (entry.schemaVersion().equals(def.getSchemaVersion())) { - log.debug("Справочник '{}' v{} актуален", entry.name(), def.getSchemaVersion()); - return; - } - JsonNode prevSchema = def.getSchemaJson(); - def.setSchemaJson(schema); - def.setSchemaVersion(entry.schemaVersion()); - def.setDescription(entry.description()); - def.setDisplayName(entry.displayName()); - def.setSupportedLocales(entryLocales.toArray(String[]::new)); - def.setDefaultLocale(entryDefault); - DictionaryDefinition saved = repository.save(def); + if (props.updateExistingSchema() && !entry.schemaVersion().equals(def.getSchemaVersion())) { + JsonNode prevSchema = def.getSchemaJson(); + def.setSchemaJson(schema); + def.setSchemaVersion(entry.schemaVersion()); + def.setDescription(entry.description()); + def.setDisplayName(entry.displayName()); + def.setSupportedLocales(entryLocales.toArray(String[]::new)); + def.setDefaultLocale(entryDefault); + DictionaryDefinition saved = repository.save(def); - var event = new DictionaryDefinitionUpdated( - saved.getId(), saved.getName(), saved.getDisplayName(), saved.getDescription(), - toEventScope(saved.getScope()), saved.getSchemaJson(), prevSchema, - saved.getSchemaVersion(), saved.getBundle(), - List.of(saved.getSupportedLocales()), saved.getDefaultLocale(), - saved.getUpdatedAt(), saved.getUpdatedBy()); - outboxRecorder.record( - "DefinitionUpdated", "DictionaryDefinition", saved.getId().toString(), - saved.getName(), saved.getScope(), manifest.bundle(), - "definition:" + saved.getName(), - EventEnvelope.of(saved.getName(), toEventScope(saved.getScope()), manifest.bundle(), event)); - log.info("Справочник '{}' обновлён до v{}", saved.getName(), saved.getSchemaVersion()); + var event = new DictionaryDefinitionUpdated( + saved.getId(), saved.getName(), saved.getDisplayName(), saved.getDescription(), + toEventScope(saved.getScope()), saved.getSchemaJson(), prevSchema, + saved.getSchemaVersion(), saved.getBundle(), + List.of(saved.getSupportedLocales()), saved.getDefaultLocale(), + saved.getUpdatedAt(), saved.getUpdatedBy()); + outboxRecorder.record( + "DefinitionUpdated", "DictionaryDefinition", saved.getId().toString(), + saved.getName(), saved.getScope(), manifest.bundle(), + "definition:" + saved.getName(), + EventEnvelope.of(saved.getName(), toEventScope(saved.getScope()), manifest.bundle(), event)); + log.info("Справочник '{}' обновлён до v{}", saved.getName(), saved.getSchemaVersion()); + def = saved; + } else { + log.debug("Справочник '{}' v{} актуален, schema не трогаем", entry.name(), def.getSchemaVersion()); + } + // Records seed запускаем всегда — они идемпотентны (skip on existing businessKey). + importRecords(manifest, entry, def); return; }