From 40fe3fdb80076c2e88aa24f808d08d95bd6bc85b Mon Sep 17 00:00:00 2001 From: Stefan Hardegger Date: Mon, 18 Aug 2025 10:04:38 +0200 Subject: [PATCH] Improvements, Fixes. --- .../java/com/storycove/repository/AuthorRepository.java | 1 - .../com/storycove/repository/CollectionRepository.java | 1 - .../java/com/storycove/repository/StoryRepository.java | 1 - .../main/java/com/storycove/service/AuthorService.java | 2 +- .../java/com/storycove/service/CollectionService.java | 6 +----- .../com/storycove/service/DatabaseManagementService.java | 2 +- .../java/com/storycove/service/EPUBExportService.java | 1 - .../java/com/storycove/service/EPUBImportService.java | 2 -- .../src/main/java/com/storycove/service/StoryService.java | 3 +-- .../src/main/java/com/storycove/service/TagService.java | 2 +- .../main/java/com/storycove/service/TypesenseService.java | 3 ++- .../java/com/storycove/repository/BaseRepositoryTest.java | 4 +++- .../java/com/storycove/service/AuthorServiceTest.java | 8 +++----- 13 files changed, 13 insertions(+), 23 deletions(-) diff --git a/backend/src/main/java/com/storycove/repository/AuthorRepository.java b/backend/src/main/java/com/storycove/repository/AuthorRepository.java index 51cdb32..a832084 100644 --- a/backend/src/main/java/com/storycove/repository/AuthorRepository.java +++ b/backend/src/main/java/com/storycove/repository/AuthorRepository.java @@ -4,7 +4,6 @@ import com.storycove.entity.Author; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; diff --git a/backend/src/main/java/com/storycove/repository/CollectionRepository.java b/backend/src/main/java/com/storycove/repository/CollectionRepository.java index 7584fb2..ee1f2ca 100644 --- a/backend/src/main/java/com/storycove/repository/CollectionRepository.java +++ b/backend/src/main/java/com/storycove/repository/CollectionRepository.java @@ -2,7 +2,6 @@ package com.storycove.repository; import com.storycove.entity.Collection; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; diff --git a/backend/src/main/java/com/storycove/repository/StoryRepository.java b/backend/src/main/java/com/storycove/repository/StoryRepository.java index 382b322..2565bc6 100644 --- a/backend/src/main/java/com/storycove/repository/StoryRepository.java +++ b/backend/src/main/java/com/storycove/repository/StoryRepository.java @@ -7,7 +7,6 @@ import com.storycove.entity.Tag; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; diff --git a/backend/src/main/java/com/storycove/service/AuthorService.java b/backend/src/main/java/com/storycove/service/AuthorService.java index ac4ec23..76173d3 100644 --- a/backend/src/main/java/com/storycove/service/AuthorService.java +++ b/backend/src/main/java/com/storycove/service/AuthorService.java @@ -242,7 +242,7 @@ public class AuthorService { rating, author.getName(), author.getAuthorRating()); author.setAuthorRating(rating); - Author savedAuthor = authorRepository.save(author); + authorRepository.save(author); // Flush and refresh to ensure the entity is up-to-date authorRepository.flush(); diff --git a/backend/src/main/java/com/storycove/service/CollectionService.java b/backend/src/main/java/com/storycove/service/CollectionService.java index e9e288a..495eebd 100644 --- a/backend/src/main/java/com/storycove/service/CollectionService.java +++ b/backend/src/main/java/com/storycove/service/CollectionService.java @@ -11,14 +11,10 @@ import com.storycove.repository.CollectionRepository; import com.storycove.repository.CollectionStoryRepository; import com.storycove.repository.StoryRepository; import com.storycove.repository.TagRepository; -import com.storycove.service.exception.DuplicateResourceException; import com.storycove.service.exception.ResourceNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -266,7 +262,7 @@ public class CollectionService { */ @Transactional public void reorderStories(UUID collectionId, List> storyOrders) { - Collection collection = findByIdBasic(collectionId); + findByIdBasic(collectionId); // Validate collection exists // Two-phase update to avoid unique constraint violations: // Phase 1: Set all positions to negative values (temporary) diff --git a/backend/src/main/java/com/storycove/service/DatabaseManagementService.java b/backend/src/main/java/com/storycove/service/DatabaseManagementService.java index 8016fe9..759fef8 100644 --- a/backend/src/main/java/com/storycove/service/DatabaseManagementService.java +++ b/backend/src/main/java/com/storycove/service/DatabaseManagementService.java @@ -1,7 +1,6 @@ package com.storycove.service; import com.fasterxml.jackson.databind.ObjectMapper; -import com.storycove.entity.*; import com.storycove.repository.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -587,6 +586,7 @@ public class DatabaseManagementService { // Validate metadata try { ObjectMapper mapper = new ObjectMapper(); + @SuppressWarnings("unchecked") Map metadata = mapper.readValue(Files.newInputStream(metadataFile), Map.class); String format = (String) metadata.get("format"); diff --git a/backend/src/main/java/com/storycove/service/EPUBExportService.java b/backend/src/main/java/com/storycove/service/EPUBExportService.java index a31798e..a2dbb8e 100644 --- a/backend/src/main/java/com/storycove/service/EPUBExportService.java +++ b/backend/src/main/java/com/storycove/service/EPUBExportService.java @@ -21,7 +21,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/backend/src/main/java/com/storycove/service/EPUBImportService.java b/backend/src/main/java/com/storycove/service/EPUBImportService.java index a30fb4f..a269a50 100644 --- a/backend/src/main/java/com/storycove/service/EPUBImportService.java +++ b/backend/src/main/java/com/storycove/service/EPUBImportService.java @@ -26,8 +26,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.UUID; -import java.util.stream.Collectors; @Service @Transactional diff --git a/backend/src/main/java/com/storycove/service/StoryService.java b/backend/src/main/java/com/storycove/service/StoryService.java index ed40aad..2bb9bf4 100644 --- a/backend/src/main/java/com/storycove/service/StoryService.java +++ b/backend/src/main/java/com/storycove/service/StoryService.java @@ -13,7 +13,6 @@ import jakarta.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -124,7 +123,7 @@ public class StoryService { @Transactional(readOnly = true) public List findBySeries(UUID seriesId) { - Series series = seriesService.findById(seriesId); + seriesService.findById(seriesId); // Validate series exists return storyRepository.findBySeriesOrderByVolume(seriesId); } diff --git a/backend/src/main/java/com/storycove/service/TagService.java b/backend/src/main/java/com/storycove/service/TagService.java index 7bc0ab7..9bdb3e2 100644 --- a/backend/src/main/java/com/storycove/service/TagService.java +++ b/backend/src/main/java/com/storycove/service/TagService.java @@ -247,7 +247,7 @@ public class TagService { } public void removeAlias(UUID tagId, UUID aliasId) { - Tag canonicalTag = findById(tagId); + findById(tagId); // Validate tag exists TagAlias alias = tagAliasRepository.findById(aliasId) .orElseThrow(() -> new ResourceNotFoundException("Tag alias", aliasId.toString())); diff --git a/backend/src/main/java/com/storycove/service/TypesenseService.java b/backend/src/main/java/com/storycove/service/TypesenseService.java index 52d1e1a..90448c9 100644 --- a/backend/src/main/java/com/storycove/service/TypesenseService.java +++ b/backend/src/main/java/com/storycove/service/TypesenseService.java @@ -958,8 +958,9 @@ public class TypesenseService { // Try to get collection info for debugging try { - CollectionResponse collection = typesenseClient.collections(AUTHORS_COLLECTION).retrieve(); + typesenseClient.collections(AUTHORS_COLLECTION).retrieve(); } catch (Exception debugException) { + // Debug collection retrieval failed } // Use wildcard approach for fallback to handle substring search diff --git a/backend/src/test/java/com/storycove/repository/BaseRepositoryTest.java b/backend/src/test/java/com/storycove/repository/BaseRepositoryTest.java index 6586e7f..d6d39c1 100644 --- a/backend/src/test/java/com/storycove/repository/BaseRepositoryTest.java +++ b/backend/src/test/java/com/storycove/repository/BaseRepositoryTest.java @@ -15,10 +15,12 @@ public abstract class BaseRepositoryTest { private static final PostgreSQLContainer postgres; static { - postgres = new PostgreSQLContainer<>("postgres:15-alpine") + @SuppressWarnings("resource") // Container is managed by shutdown hook + PostgreSQLContainer container = new PostgreSQLContainer<>("postgres:15-alpine") .withDatabaseName("storycove_test") .withUsername("test") .withPassword("test"); + postgres = container; postgres.start(); // Add shutdown hook to properly close the container diff --git a/backend/src/test/java/com/storycove/service/AuthorServiceTest.java b/backend/src/test/java/com/storycove/service/AuthorServiceTest.java index 06ff9af..9aa261e 100644 --- a/backend/src/test/java/com/storycove/service/AuthorServiceTest.java +++ b/backend/src/test/java/com/storycove/service/AuthorServiceTest.java @@ -9,7 +9,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.domain.Page; @@ -23,7 +22,6 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; import static org.mockito.Mockito.times; @@ -176,7 +174,7 @@ class AuthorServiceTest { when(authorRepository.existsByName("Updated Author")).thenReturn(false); when(authorRepository.save(any(Author.class))).thenReturn(testAuthor); - Author result = authorService.update(testId, updates); + authorService.update(testId, updates); assertEquals("Updated Author", testAuthor.getName()); assertEquals("Updated notes", testAuthor.getNotes()); @@ -318,7 +316,7 @@ class AuthorServiceTest { when(authorRepository.findById(testId)).thenReturn(Optional.of(testAuthor)); when(authorRepository.save(any(Author.class))).thenReturn(testAuthor); - Author result = authorService.setRating(testId, 4); + authorService.setRating(testId, 4); assertEquals(4, testAuthor.getAuthorRating()); verify(authorRepository, times(2)).findById(testId); // Called twice: once initially, once after flush @@ -342,7 +340,7 @@ class AuthorServiceTest { when(authorRepository.findById(testId)).thenReturn(Optional.of(testAuthor)); when(authorRepository.save(any(Author.class))).thenReturn(testAuthor); - Author result = authorService.setRating(testId, null); + authorService.setRating(testId, null); assertNull(testAuthor.getAuthorRating()); verify(authorRepository, times(2)).findById(testId); // Called twice: once initially, once after flush