Thay đổi ngày 20260609

This commit is contained in:
2026-06-09 19:48:56 +07:00
parent d243c67718
commit d39d3b3d53
7 changed files with 173 additions and 36 deletions
+10 -11
View File
@@ -856,34 +856,33 @@ router.put('/scenes/:id', protect, uploadSinglePanorama, async (req, res, next)
if (targetSceneIds.length > 0) {
for (const targetId of targetSceneIds) {
const updateData = { privacy: privacy };
let newShareToken = null;
let updateOperation = { $set: { privacy: privacy } };
// Nếu chuyển sang 'shared', đảm bảo scene con cũng có token riêng
if (privacy === 'shared') {
const target = await Scene.findById(targetId);
if (target && !target.shareToken) {
newShareToken = crypto.randomBytes(24).toString('hex');
updateData.shareToken = newShareToken;
updateOperation.$set.shareToken = crypto.randomBytes(24).toString('hex');
// Đặt thời hạn token của scene con giống scene cha nếu có
if (scene.shareTokenExpires) {
updateData.shareTokenExpires = scene.shareTokenExpires;
updateOperation.$set.shareTokenExpires = scene.shareTokenExpires;
}
} else if (target && target.shareToken) {
// Nếu scene con đã có token, giữ nguyên
updateData.shareToken = target.shareToken;
updateOperation.$set.shareToken = target.shareToken;
if (scene.shareTokenExpires) {
updateData.shareTokenExpires = scene.shareTokenExpires;
updateOperation.$set.shareTokenExpires = scene.shareTokenExpires;
} else {
updateData.shareTokenExpires = null;
updateOperation.$set.shareTokenExpires = null;
}
}
} else {
// Nếu không phải 'shared', xóa token và thời hạn của scene con
updateData.shareToken = null;
updateData.shareTokenExpires = null;
// Sử dụng $unset để loại bỏ trường thay vì đặt thành null,
// điều này giúp tránh lỗi duplicate key nếu index không phải là sparse.
updateOperation.$unset = { shareToken: "", shareTokenExpires: "" };
}
await Scene.updateOne({ _id: targetId }, { $set: updateData });
await Scene.updateOne({ _id: targetId }, updateOperation);
}
console.log(`[Privacy Sync] Cascaded privacy status to ${targetSceneIds.length} linked scenes.`);
}