fix: 保存/发布快照时清理同状态旧记录,每个站点每种状态最多保留一条
This commit is contained in:
@@ -134,11 +134,12 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
int newVersion = (latestDraft != null) ? latestDraft.getVersion() + 1 : 1;
|
// 删除旧 draft,保证最新只有一条
|
||||||
|
snapshotMapper.deleteBySiteIdAndStatus(siteId, "draft");
|
||||||
|
|
||||||
SiteSnapshot snapshot = new SiteSnapshot();
|
SiteSnapshot snapshot = new SiteSnapshot();
|
||||||
snapshot.setSiteId(siteId);
|
snapshot.setSiteId(siteId);
|
||||||
snapshot.setVersion(newVersion);
|
snapshot.setVersion((latestDraft != null) ? latestDraft.getVersion() + 1 : 1);
|
||||||
populateSnapshotFields(snapshot, data);
|
populateSnapshotFields(snapshot, data);
|
||||||
snapshot.setChecksum(checksum);
|
snapshot.setChecksum(checksum);
|
||||||
snapshot.setStatus("draft");
|
snapshot.setStatus("draft");
|
||||||
@@ -149,7 +150,7 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
|
|||||||
String bundleJson = toBundleJson(snapshot);
|
String bundleJson = toBundleJson(snapshot);
|
||||||
jsonCache.put(draftKey(siteId), bundleJson);
|
jsonCache.put(draftKey(siteId), bundleJson);
|
||||||
|
|
||||||
log.info("快照已更新: siteId={}, version={}, checksum={}", siteId, newVersion, checksum.substring(0, 8));
|
log.info("快照已更新: siteId={}, version={}, checksum={}", siteId, snapshot.getVersion(), checksum.substring(0, 8));
|
||||||
return snapshot;
|
return snapshot;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("更新快照失败 siteId={}", siteId, e);
|
log.error("更新快照失败 siteId={}", siteId, e);
|
||||||
@@ -177,11 +178,12 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
|
|||||||
return latestDraft;
|
return latestDraft;
|
||||||
}
|
}
|
||||||
|
|
||||||
int newVersion = (latestDraft != null) ? latestDraft.getVersion() + 1 : 1;
|
// 删除旧 draft,保证最新只有一条
|
||||||
|
snapshotMapper.deleteBySiteIdAndStatus(siteId, "draft");
|
||||||
|
|
||||||
SiteSnapshot snapshot = new SiteSnapshot();
|
SiteSnapshot snapshot = new SiteSnapshot();
|
||||||
snapshot.setSiteId(siteId);
|
snapshot.setSiteId(siteId);
|
||||||
snapshot.setVersion(newVersion);
|
snapshot.setVersion((latestDraft != null) ? latestDraft.getVersion() + 1 : 1);
|
||||||
populateSnapshotFields(snapshot, data);
|
populateSnapshotFields(snapshot, data);
|
||||||
snapshot.setChecksum(checksum);
|
snapshot.setChecksum(checksum);
|
||||||
snapshot.setStatus("draft");
|
snapshot.setStatus("draft");
|
||||||
@@ -192,7 +194,7 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
|
|||||||
String bundleJson = toBundleJson(snapshot);
|
String bundleJson = toBundleJson(snapshot);
|
||||||
jsonCache.put(draftKey(siteId), bundleJson);
|
jsonCache.put(draftKey(siteId), bundleJson);
|
||||||
|
|
||||||
log.info("预览版已保存: siteId={}, version={}, checksum={}", siteId, newVersion, checksum.substring(0, 8));
|
log.info("预览版已保存: siteId={}, version={}, checksum={}", siteId, snapshot.getVersion(), checksum.substring(0, 8));
|
||||||
return snapshot;
|
return snapshot;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("保存预览版失败 siteId={}", siteId, e);
|
log.error("保存预览版失败 siteId={}", siteId, e);
|
||||||
@@ -234,7 +236,8 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
|
|||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新状态为 published
|
// 先删旧 published,再改当前 draft 为 published(事务保证原子性)
|
||||||
|
snapshotMapper.deleteBySiteIdAndStatus(siteId, "published");
|
||||||
draft.setStatus("published");
|
draft.setStatus("published");
|
||||||
draft.setPublishedAt(LocalDateTime.now());
|
draft.setPublishedAt(LocalDateTime.now());
|
||||||
snapshotMapper.updateById(draft);
|
snapshotMapper.updateById(draft);
|
||||||
|
|||||||
Reference in New Issue
Block a user