From 297c76006acaa5d8f2dabd398ca235a1e73df02c Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 2 Oct 2025 21:53:23 +0200 Subject: [PATCH] use more records --- .../java/com/commafeed/backend/dao/FeedEntryDAO.java | 9 +-------- .../commafeed/backend/dao/FeedEntryStatusDAO.java | 6 +++--- .../java/com/commafeed/backend/favicon/Favicon.java | 9 +-------- .../com/commafeed/backend/feed/FeedEntryKeyword.java | 10 +--------- .../commafeed/backend/feed/FeedRefreshUpdater.java | 7 +------ .../backend/service/db/DatabaseCleaningService.java | 4 ++-- .../com/commafeed/frontend/resource/FeedREST.java | 2 +- .../commafeed/frontend/resource/fever/FeverREST.java | 2 +- .../backend/favicon/FacebookFaviconFetcherTest.java | 4 ++-- .../backend/favicon/YoutubeFaviconFetcherTest.java | 12 ++++++------ .../service/db/DatabaseCleaningServiceTest.java | 8 ++++---- 11 files changed, 23 insertions(+), 50 deletions(-) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index c7bfb678..5b17c079 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -12,9 +12,6 @@ import com.commafeed.backend.model.QFeedEntry; import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.NumberExpression; -import lombok.AllArgsConstructor; -import lombok.Getter; - @Singleton public class FeedEntryDAO extends GenericDAO { @@ -64,10 +61,6 @@ public class FeedEntryDAO extends GenericDAO { return delete(list); } - @AllArgsConstructor - @Getter - public static class FeedCapacity { - private Long id; - private Long capacity; + public record FeedCapacity(Long id, Long capacity) { } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 0e4e0772..272a7d95 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -129,9 +129,9 @@ public class FeedEntryStatusDAO extends GenericDAO { if (CollectionUtils.isNotEmpty(keywords)) { for (FeedEntryKeyword keyword : keywords) { BooleanBuilder or = new BooleanBuilder(); - or.or(CONTENT.content.containsIgnoreCase(keyword.getKeyword())); - or.or(CONTENT.title.containsIgnoreCase(keyword.getKeyword())); - if (keyword.getMode() == Mode.EXCLUDE) { + or.or(CONTENT.content.containsIgnoreCase(keyword.keyword())); + or.or(CONTENT.title.containsIgnoreCase(keyword.keyword())); + if (keyword.mode() == Mode.EXCLUDE) { or.not(); } query.where(or); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java index f9a7bd6e..4e2ea9e5 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java @@ -2,20 +2,13 @@ package com.commafeed.backend.favicon; import jakarta.ws.rs.core.MediaType; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -@RequiredArgsConstructor -@Getter @Slf4j -public class Favicon { +public record Favicon(byte[] icon, MediaType mediaType) { private static final MediaType DEFAULT_MEDIA_TYPE = MediaType.valueOf("image/x-icon"); - private final byte[] icon; - private final MediaType mediaType; - public Favicon(byte[] icon, String contentType) { this(icon, parseMediaType(contentType)); } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedEntryKeyword.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedEntryKeyword.java index 72ffb3b3..782edb96 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedEntryKeyword.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedEntryKeyword.java @@ -5,23 +5,15 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - /** * A keyword used in a search query */ -@Getter -@RequiredArgsConstructor -public class FeedEntryKeyword { +public record FeedEntryKeyword(String keyword, Mode mode) { public enum Mode { INCLUDE, EXCLUDE } - private final String keyword; - private final Mode mode; - public static List fromQueryString(String keywords) { List list = new ArrayList<>(); if (keywords != null) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java index 1a23eff8..e7b1c522 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java @@ -31,7 +31,6 @@ import com.commafeed.frontend.ws.WebSocketMessageBuilder; import com.commafeed.frontend.ws.WebSocketSessions; import com.google.common.util.concurrent.Striped; -import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; /** @@ -171,11 +170,7 @@ public class FeedRefreshUpdater { WebSocketMessageBuilder.newFeedEntries(sub, unreadCount))); } - @AllArgsConstructor - private static class AddEntryResult { - private final boolean processed; - private final boolean inserted; - private final Set subscriptionsForWhichEntryIsUnread; + private record AddEntryResult(boolean processed, boolean inserted, Set subscriptionsForWhichEntryIsUnread) { } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseCleaningService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseCleaningService.java index db227b48..564d1d96 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseCleaningService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseCleaningService.java @@ -92,10 +92,10 @@ public class DatabaseCleaningService { } for (final FeedCapacity feed : feeds) { - long remaining = feed.getCapacity() - maxFeedCapacity; + long remaining = feed.capacity() - maxFeedCapacity; do { final long rem = remaining; - int deleted = unitOfWork.call(() -> feedEntryDAO.deleteOldEntries(feed.getId(), Math.min(batchSize, rem))); + int deleted = unitOfWork.call(() -> feedEntryDAO.deleteOldEntries(feed.id(), Math.min(batchSize, rem))); entriesDeletedMeter.mark(deleted); total += deleted; remaining -= deleted; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index abf2d18d..9e857c4f 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -342,7 +342,7 @@ public class FeedREST { Feed feed = subscription.getFeed(); Favicon icon = feedService.fetchFavicon(feed); - return Response.ok(icon.getIcon(), icon.getMediaType()).build(); + return Response.ok(icon.icon(), icon.mediaType()).build(); } @POST diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java index 140b5c9f..c800a817 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java @@ -306,7 +306,7 @@ public class FeverREST { FeverFavicon f = new FeverFavicon(); f.setId(s.getFeed().getId()); - f.setData(String.format("data:%s;base64,%s", favicon.getMediaType(), Base64.getEncoder().encodeToString(favicon.getIcon()))); + f.setData(String.format("data:%s;base64,%s", favicon.mediaType(), Base64.getEncoder().encodeToString(favicon.icon()))); return f; }).toList(); } diff --git a/commafeed-server/src/test/java/com/commafeed/backend/favicon/FacebookFaviconFetcherTest.java b/commafeed-server/src/test/java/com/commafeed/backend/favicon/FacebookFaviconFetcherTest.java index 026d7416..b2cc3c90 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/favicon/FacebookFaviconFetcherTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/favicon/FacebookFaviconFetcherTest.java @@ -43,8 +43,8 @@ class FacebookFaviconFetcherTest { Favicon result = faviconFetcher.fetch(feed); Assertions.assertNotNull(result); - Assertions.assertEquals(iconBytes, result.getIcon()); - Assertions.assertTrue(result.getMediaType().isCompatible(MediaType.valueOf(contentType))); + Assertions.assertEquals(iconBytes, result.icon()); + Assertions.assertTrue(result.mediaType().isCompatible(MediaType.valueOf(contentType))); } @Test diff --git a/commafeed-server/src/test/java/com/commafeed/backend/favicon/YoutubeFaviconFetcherTest.java b/commafeed-server/src/test/java/com/commafeed/backend/favicon/YoutubeFaviconFetcherTest.java index 87814804..c2b4bb75 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/favicon/YoutubeFaviconFetcherTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/favicon/YoutubeFaviconFetcherTest.java @@ -86,8 +86,8 @@ class YoutubeFaviconFetcherTest { Favicon result = faviconFetcher.fetch(feed); Assertions.assertNotNull(result); - Assertions.assertEquals(iconBytes, result.getIcon()); - Assertions.assertTrue(result.getMediaType().isCompatible(MediaType.valueOf(contentType))); + Assertions.assertEquals(iconBytes, result.icon()); + Assertions.assertTrue(result.mediaType().isCompatible(MediaType.valueOf(contentType))); } @Test @@ -114,8 +114,8 @@ class YoutubeFaviconFetcherTest { Favicon result = faviconFetcher.fetch(feed); Assertions.assertNotNull(result); - Assertions.assertEquals(iconBytes, result.getIcon()); - Assertions.assertTrue(result.getMediaType().isCompatible(MediaType.valueOf(contentType))); + Assertions.assertEquals(iconBytes, result.icon()); + Assertions.assertTrue(result.mediaType().isCompatible(MediaType.valueOf(contentType))); } @Test @@ -151,8 +151,8 @@ class YoutubeFaviconFetcherTest { Favicon result = faviconFetcher.fetch(feed); Assertions.assertNotNull(result); - Assertions.assertEquals(iconBytes, result.getIcon()); - Assertions.assertTrue(result.getMediaType().isCompatible(MediaType.valueOf(contentType))); + Assertions.assertEquals(iconBytes, result.icon()); + Assertions.assertTrue(result.mediaType().isCompatible(MediaType.valueOf(contentType))); } @Test diff --git a/commafeed-server/src/test/java/com/commafeed/backend/service/db/DatabaseCleaningServiceTest.java b/commafeed-server/src/test/java/com/commafeed/backend/service/db/DatabaseCleaningServiceTest.java index a6eb2f90..91f31441 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/service/db/DatabaseCleaningServiceTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/service/db/DatabaseCleaningServiceTest.java @@ -108,12 +108,12 @@ class DatabaseCleaningServiceTest { @Test void cleanEntriesForFeedsExceedingCapacityDeletesOldEntries() { FeedCapacity feed1 = Mockito.mock(FeedCapacity.class); - Mockito.when(feed1.getId()).thenReturn(1L); - Mockito.when(feed1.getCapacity()).thenReturn(180L); + Mockito.when(feed1.id()).thenReturn(1L); + Mockito.when(feed1.capacity()).thenReturn(180L); FeedCapacity feed2 = Mockito.mock(FeedCapacity.class); - Mockito.when(feed2.getId()).thenReturn(2L); - Mockito.when(feed2.getCapacity()).thenReturn(120L); + Mockito.when(feed2.id()).thenReturn(2L); + Mockito.when(feed2.capacity()).thenReturn(120L); Mockito.when(feedEntryDAO.findFeedsExceedingCapacity(50, BATCH_SIZE)) .thenReturn(Arrays.asList(feed1, feed2))