From 525515ae5d27c3cf194ea306a94bb7a60cbef12d Mon Sep 17 00:00:00 2001 From: "DESKTOP-N5KD4EV\\litte" Date: Wed, 15 Oct 2025 15:03:23 +0900 Subject: [PATCH] =?UTF-8?q?fix/OPS-405=20:=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20category=20=EC=B9=BC=EB=9F=BC=20null=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/folder/service/FolderService.java | 5 +- .../repository/DataSourceQRepositoryImpl.java | 60 ++++++++++++------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderService.java index 213aceab..cb605acb 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderService.java @@ -127,7 +127,10 @@ public FolderFilesDto getFilesInFolder(Archive archive, Integer folderId) { ds.getSummary(), ds.getSourceUrl(), ds.getImageUrl(), - ds.getTags() == null ? List.of() : ds.getTags().stream().map(Tag::getTagName).toList(), + ds.getTags() == null ? List.of() : ds.getTags().stream() + .map(Tag::getTagName) + .filter(java.util.Objects::nonNull) + .toList(), ds.getCategory() == null ? null : ds.getCategory().name() )) .toList(); diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImpl.java b/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImpl.java index a6f67dca..9846ad5f 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImpl.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImpl.java @@ -22,6 +22,7 @@ import org.tuna.zoopzoop.backend.domain.datasource.entity.QDataSource; import org.tuna.zoopzoop.backend.domain.datasource.entity.QTag; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -115,23 +116,30 @@ public Page search(Integer memberId, DataSourceSearchCondi .where(ds.id.in(ids)) .fetch() .stream() + .filter(row -> row.get(tag.tagName) != null) .collect(Collectors.groupingBy( row -> row.get(ds.id), Collectors.mapping(row -> row.get(tag.tagName), Collectors.toList()) )); List content = tuples.stream() - .map(row -> new DataSourceSearchItem( - row.get(ds.id), - row.get(ds.title), - row.get(ds.createDate).toLocalDate(), - row.get(ds.summary), - row.get(ds.source), - row.get(ds.sourceUrl), - row.get(ds.imageUrl), - tagsById.getOrDefault(row.get(ds.id), List.of()), - row.get(ds.category).name() - )) + .map(row -> { + Category cat = row.get(ds.category); + String categoryCode = (cat != null ? cat.name() : null); + LocalDateTime createdAt = row.get(ds.createDate); + LocalDate createdDate = (createdAt != null ? createdAt.toLocalDate() : null); + return new DataSourceSearchItem( + row.get(ds.id), + row.get(ds.title), + createdDate, + row.get(ds.summary), + row.get(ds.source), + row.get(ds.sourceUrl), + row.get(ds.imageUrl), + tagsById.getOrDefault(row.get(ds.id), List.of()), + categoryCode + ); + }) .toList(); return new PageImpl<>(content, pageable, total); @@ -230,24 +238,30 @@ public Page searchInArchive(Integer archiveId, DataSourceS .where(ds.id.in(tuples.stream().map(t -> t.get(ds.id)).toList())) .fetch() .stream() + .filter(row -> row.get(tag.tagName) != null) .collect(Collectors.groupingBy( row -> row.get(ds.id), Collectors.mapping(row -> row.get(tag.tagName), Collectors.toList()) )); List content = tuples.stream() - .map(row -> new DataSourceSearchItem( - row.get(ds.id), - row.get(ds.title), - // LocalDateTime(createDate) → LocalDate - row.get(ds.createDate).toLocalDate(), - row.get(ds.summary), - row.get(ds.source), - row.get(ds.sourceUrl), - row.get(ds.imageUrl), - tagsById.getOrDefault(row.get(ds.id), List.of()), - row.get(ds.category).name() // 응답은 영문 코드 유지 - )) + .map(row -> { + Category category = row.get(ds.category); + String categoryCode = (category != null ? category.name() : null); // null 허용 + LocalDateTime createdAt = row.get(ds.createDate); + LocalDate createdDate = (createdAt != null ? createdAt.toLocalDate() : null); + return new DataSourceSearchItem( + row.get(ds.id), + row.get(ds.title), + createdDate, + row.get(ds.summary), + row.get(ds.source), + row.get(ds.sourceUrl), + row.get(ds.imageUrl), + tagsById.getOrDefault(row.get(ds.id), List.of()), + categoryCode + ); + }) .toList(); return new PageImpl<>(content, pageable, total);