mirror of
https://github.com/booklore-app/booklore.git
synced 2025-12-23 22:28:11 -05:00
Fix: locking fields discards unsaved changes (#1799)
* Fixes data loss on lock fields * Test combined metadata update and lock field
This commit is contained in:
@@ -74,8 +74,6 @@ public class BookMetadataUpdater {
|
||||
MetadataClearFlags clearFlags = wrapper.getClearFlags();
|
||||
BookMetadataEntity metadata = bookEntity.getMetadata();
|
||||
|
||||
updateLocks(newMetadata, metadata);
|
||||
|
||||
boolean thumbnailRequiresUpdate = StringUtils.hasText(newMetadata.getThumbnailUrl());
|
||||
boolean hasMetadataChanges = MetadataChangeDetector.isDifferent(newMetadata, metadata, clearFlags);
|
||||
boolean hasValueChanges = MetadataChangeDetector.hasValueChanges(newMetadata, metadata, clearFlags);
|
||||
@@ -84,7 +82,8 @@ public class BookMetadataUpdater {
|
||||
return;
|
||||
}
|
||||
|
||||
if (metadata.areAllFieldsLocked()) {
|
||||
// If all fields are locked we must allow unlocking, hasValueChanges will be false
|
||||
if (metadata.areAllFieldsLocked() && hasValueChanges) {
|
||||
log.warn("All fields are locked for book ID {}. Skipping update.", bookId);
|
||||
return;
|
||||
}
|
||||
@@ -103,6 +102,7 @@ public class BookMetadataUpdater {
|
||||
updateTagsIfNeeded(newMetadata, metadata, clearFlags, mergeTags, replaceMode);
|
||||
bookReviewUpdateService.updateBookReviews(newMetadata, metadata, clearFlags, mergeCategories);
|
||||
updateThumbnailIfNeeded(bookId, newMetadata, metadata, updateThumbnail);
|
||||
updateLocks(newMetadata, metadata);
|
||||
|
||||
bookRepository.save(bookEntity);
|
||||
|
||||
|
||||
@@ -259,4 +259,34 @@ class BookMetadataUpdaterTest {
|
||||
assertTrue(bookEntity.getMetadata().getMoods().stream().anyMatch(m -> m.getName().equals("Mood2")));
|
||||
assertTrue(bookEntity.getMetadata().getMoods().stream().anyMatch(m -> m.getName().equals("Mood3")));
|
||||
}
|
||||
|
||||
@Test
|
||||
void setBookMetadata_withLockField_shouldUpdateAndLock() {
|
||||
BookEntity bookEntity = new BookEntity();
|
||||
bookEntity.setId(1L);
|
||||
|
||||
BookMetadataEntity metadataEntity = new BookMetadataEntity();
|
||||
metadataEntity.setTitle("Old Title");
|
||||
metadataEntity.setTitleLocked(false);
|
||||
bookEntity.setMetadata(metadataEntity);
|
||||
|
||||
BookMetadata newMetadata = new BookMetadata();
|
||||
newMetadata.setTitle("New Title");
|
||||
newMetadata.setTitleLocked(true);
|
||||
|
||||
MetadataUpdateWrapper wrapper = MetadataUpdateWrapper.builder()
|
||||
.metadata(newMetadata)
|
||||
.build();
|
||||
|
||||
MetadataUpdateContext context = MetadataUpdateContext.builder()
|
||||
.bookEntity(bookEntity)
|
||||
.metadataUpdateWrapper(wrapper)
|
||||
.replaceMode(MetadataReplaceMode.REPLACE_ALL)
|
||||
.build();
|
||||
|
||||
bookMetadataUpdater.setBookMetadata(context);
|
||||
|
||||
assertEquals("New Title", bookEntity.getMetadata().getTitle());
|
||||
assertTrue(bookEntity.getMetadata().getTitleLocked());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user