Skip to content

Commit 0fa75cc

Browse files
authored
refactor/OPS-397 : 검색 요구사항 반영 (#161)
1 parent 13bde08 commit 0fa75cc

File tree

10 files changed

+263
-139
lines changed

10 files changed

+263
-139
lines changed

src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public FolderFilesDto getFilesInFolder(Archive archive, Integer folderId) {
119119
Folder folder = folderRepository.findByIdAndArchiveId(folderId, archive.getId())
120120
.orElseThrow(() -> new NoResultException("존재하지 않는 폴더입니다."));
121121

122-
var files = dataSourceRepository.findAllByFolder(folder).stream()
122+
var files = dataSourceRepository.findAllByFolderAndIsActiveTrue(folder).stream()
123123
.map(ds -> new FileSummary(
124124
ds.getId(),
125125
ds.getTitle(),

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.tuna.zoopzoop.backend.domain.datasource.entity.QDataSource;
2121
import org.tuna.zoopzoop.backend.domain.datasource.entity.QTag;
2222

23-
import java.time.LocalDateTime;
23+
import java.time.LocalDate;
2424
import java.util.ArrayList;
2525
import java.util.List;
2626
import java.util.Map;
@@ -139,7 +139,7 @@ private List<OrderSpecifier<?>> toOrderSpecifiers(Sort sort) {
139139
switch (o.getProperty()) {
140140
case "title" -> specs.add(new OrderSpecifier<>(dir, root.getString("title")));
141141
case "createdAt" -> specs.add(
142-
new OrderSpecifier<>(dir, root.getDateTime("createDate", LocalDateTime.class))
142+
new OrderSpecifier<>(dir, root.getDate("dataCreatedDate", LocalDate.class))
143143
);
144144
default -> { /* 무시 */ }
145145
}

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ where ds.folder.id in (
7272
""")
7373
void deleteByArchiveId(@Param("archiveId") int archiveId);
7474

75-
List<DataSource> findAllByFolder(Folder folder);
75+
List<DataSource> findAllByFolderAndIsActiveTrue(Folder folder);
7676

7777
List<DataSource> findAllByFolderId(Integer folderId);
7878

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/service/DataSourceService.java

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,62 @@ public int restoreMany(List<Integer> ids) {
229229
}
230230

231231
// search
232-
@Transactional
233-
public Page<DataSourceSearchItem> searchInArchive(Integer archiveId, DataSourceSearchCondition cond, Pageable pageable) {
232+
/**
233+
* Personal 검색: memberId 스코프
234+
*/
235+
public Page<DataSourceSearchItem> searchByMember(int memberId,
236+
DataSourceSearchCondition cond,
237+
Pageable pageable) {
238+
cond = normalizeFolder(memberId, null, cond);
239+
return dataSourceQRepository.search(memberId, cond, pageable);
240+
}
241+
242+
/**
243+
* Space(공유) 검색: archiveId 스코프
244+
*/
245+
public Page<DataSourceSearchItem> searchByArchive(int archiveId,
246+
DataSourceSearchCondition cond,
247+
Pageable pageable) {
248+
cond = normalizeFolder(null, archiveId, cond);
234249
return dataSourceQRepository.searchInArchive(archiveId, cond, pageable);
235250
}
236251

252+
/**
253+
* folderId=0 -> 기본 폴더 치환
254+
* memberId가 있으면 Personal, archiveId가 있으면 Shared로 판단
255+
*/
256+
private DataSourceSearchCondition normalizeFolder(Integer memberId,
257+
Integer archiveId,
258+
DataSourceSearchCondition cond) {
259+
if (cond == null) return null;
260+
261+
Integer resolvedFolderId = cond.getFolderId();
262+
if (resolvedFolderId != null && resolvedFolderId == 0) {
263+
if (memberId != null) {
264+
resolvedFolderId = folderRepository.findDefaultFolderByMemberId(memberId)
265+
.orElseThrow(() -> new NoResultException("기본 폴더가 존재하지 않습니다."))
266+
.getId();
267+
} else if (archiveId != null) {
268+
resolvedFolderId = folderRepository.findByArchiveIdAndIsDefaultTrue(archiveId)
269+
.orElseThrow(() -> new NoResultException("공유 기본 폴더 없음"))
270+
.getId();
271+
} else {
272+
throw new IllegalStateException("memberId 또는 archiveId 중 하나는 필요합니다.");
273+
}
274+
}
275+
276+
// cond를 보존하되 folderId만 치환한 새 객체로 반환
277+
return DataSourceSearchCondition.builder()
278+
.title(cond.getTitle())
279+
.summary(cond.getSummary())
280+
.category(cond.getCategory())
281+
.keyword(cond.getKeyword())
282+
.folderName(cond.getFolderName())
283+
.isActive(cond.getIsActive()) // controller default=true, repo에서도 방어
284+
.folderId(resolvedFolderId)
285+
.build();
286+
}
287+
237288
// ===== update: 공통 유틸 =====
238289
// 이미지 유효성 검사
239290
public void validateImage(MultipartFile image) {

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/service/PersonalDataSourceService.java

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717
import org.tuna.zoopzoop.backend.domain.datasource.dto.DataSourceSearchItem;
1818
import org.tuna.zoopzoop.backend.domain.datasource.dto.UpdateOutcome;
1919
import org.tuna.zoopzoop.backend.domain.datasource.entity.Tag;
20-
import org.tuna.zoopzoop.backend.domain.datasource.repository.DataSourceQRepository;
2120
import org.tuna.zoopzoop.backend.domain.datasource.repository.DataSourceRepository;
22-
import org.tuna.zoopzoop.backend.global.aws.S3Service;
2321

2422
import java.io.IOException;
2523
import java.util.*;
@@ -30,13 +28,10 @@ public class PersonalDataSourceService {
3028

3129
private final DataSourceService domain;
3230
private final DataSourceRepository dataSourceRepository;
33-
private final DataSourceQRepository dataSourceQRepository;
3431
private final FolderRepository folderRepository;
3532
private final PersonalArchiveRepository personalArchiveRepository;
3633
private final DataProcessorService dataProcessorService;
3734

38-
private final S3Service s3Service;
39-
4035
private int getPersonalArchiveId(int memberId) {
4136
PersonalArchive pa = personalArchiveRepository.findByMemberId(memberId)
4237
.orElseThrow(() -> new NoResultException("개인 아카이브를 찾을 수 없습니다."));
@@ -191,20 +186,9 @@ public UpdateOutcome updateWithImage(int memberId, int dataSourceId,
191186
}
192187

193188
// search
194-
public Page<DataSourceSearchItem> search(int memberId, DataSourceSearchCondition cond, Pageable pageable) {
195-
if (cond.getFolderId() != null && cond.getFolderId() == 0) {
196-
int defaultFolderId = folderRepository.findDefaultFolderByMemberId(memberId)
197-
.orElseThrow(() -> new NoResultException("기본 폴더가 존재하지 않습니다."))
198-
.getId();
199-
cond = DataSourceSearchCondition.builder()
200-
.title(cond.getTitle())
201-
.summary(cond.getSummary())
202-
.category(cond.getCategory())
203-
.folderName(cond.getFolderName())
204-
.isActive(cond.getIsActive())
205-
.folderId(defaultFolderId)
206-
.build();
207-
}
208-
return dataSourceQRepository.search(memberId, cond, pageable);
189+
public Page<DataSourceSearchItem> search(int memberId,
190+
DataSourceSearchCondition cond,
191+
Pageable pageable) {
192+
return domain.searchByMember(memberId, cond, pageable);
209193
}
210194
}

0 commit comments

Comments
 (0)