Merge branch 'fix/reopen-latest-closed-and-revert-i18n' into 'main'
fix(record): reopen latest closed по max(validTo) + revert i18n See merge request 2-6/2-6-4/terravault/ordinis!306
This commit is contained in:
@@ -158,7 +158,7 @@ export const RecordHistoryDrawer = ({
|
||||
onClick={() => onRevert(rec.data, displayVersion)}
|
||||
leftIcon={<ArrowCounterClockwiseIcon weight="regular" size={14} />}
|
||||
>
|
||||
{t('history.revert', { defaultValue: `Откатить к v${displayVersion}` })}
|
||||
{t('history.revert', { v: displayVersion, defaultValue: `Откатить к v${displayVersion}` })}
|
||||
</Button>
|
||||
)}
|
||||
{isLatest && status === 'expired' && onReopen && (
|
||||
|
||||
+9
-8
@@ -441,17 +441,18 @@ public class DictionaryRecordService {
|
||||
"business_key='" + businessKey + "' уже активен — re-open не нужен.");
|
||||
}
|
||||
|
||||
// findByDictionaryIdAndBusinessKeyOrderByValidFromDesc возвращает версии
|
||||
// отсортированными по validFrom desc. Самая недавно закрытая — это первый
|
||||
// элемент, у которого validTo != FAR_FUTURE (closed) и validTo больше всех
|
||||
// других closed. Так как версии bitemporal не пересекаются (exclusion
|
||||
// constraint), а closed period — последний по validFrom, то это и есть
|
||||
// первый matching элемент.
|
||||
// Самая недавно закрытая версия = max(validTo) среди closed с НЕпустым
|
||||
// периодом. Берём по validTo, а не по validFrom: при UPDATE/CLOSE в один
|
||||
// момент возможны zero-length версии (validFrom == validTo) — артефакты,
|
||||
// которые "никогда не были активны". Их фильтруем (isAfter validFrom),
|
||||
// иначе re-open восстановил бы пустую версию вместо реально закрытой.
|
||||
var prevData = repository
|
||||
.findByDictionaryIdAndBusinessKeyOrderByValidFromDesc(d.getId(), businessKey)
|
||||
.stream()
|
||||
.filter(r -> r.getValidTo() != null && r.getValidTo().isBefore(FAR_FUTURE))
|
||||
.findFirst()
|
||||
.filter(r -> r.getValidTo() != null
|
||||
&& r.getValidTo().isBefore(FAR_FUTURE)
|
||||
&& r.getValidTo().isAfter(r.getValidFrom()))
|
||||
.max(java.util.Comparator.comparing(DictionaryRecord::getValidTo))
|
||||
.orElseThrow(() -> OrdinisException.notFound(
|
||||
"record_not_closed",
|
||||
"Нет закрытой версии business_key='" + businessKey + "' для re-open."));
|
||||
|
||||
Reference in New Issue
Block a user