fix(cuod-bundle): seed records for existing definitions too

Importer бросал early-return для уже существующих definitions, поэтому
records никогда не наполнялись на повторных стартах. Records seed
теперь вызывается всегда (idempotent — skip по businessKey).
This commit is contained in:
Александр Зимин
2026-05-03 23:38:52 +03:00
parent aab7199600
commit 0752b3acd6
@@ -103,35 +103,34 @@ public class CuodBundleImporter {
Optional<DictionaryDefinition> 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;
}