fix(cuod-bundle): seed records for existing definitions too
Importer бросал early-return для уже существующих definitions, поэтому records никогда не наполнялись на повторных стартах. Records seed теперь вызывается всегда (idempotent — skip по businessKey).
This commit is contained in:
+27
-28
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user