Skip to content

Commit

Permalink
feat : 제목 검색 기능 추가 (#34)
Browse files Browse the repository at this point in the history
* feat : 자료실 글쓰기, 리스트 출력 api

* feat : 제목 검색 기능 추가
  • Loading branch information
sebbbin authored Nov 22, 2023
1 parent 0cdb833 commit c2ea18a
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 17 deletions.
17 changes: 11 additions & 6 deletions src/main/java/kusitms/gallae/controller/ArchiveController.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,8 @@
import kusitms.gallae.config.BaseResponse;
import kusitms.gallae.config.BaseResponseStatus;
import kusitms.gallae.domain.Archive;
import kusitms.gallae.domain.Review;

import kusitms.gallae.dto.archive.*;
import kusitms.gallae.dto.review.ReviewDtoRes;
import kusitms.gallae.dto.review.ReviewEditModel;
import kusitms.gallae.dto.review.ReviewEditReq;
import kusitms.gallae.global.S3Service;
import kusitms.gallae.service.archive.ArchiveService;
import lombok.RequiredArgsConstructor;
Expand All @@ -27,8 +24,10 @@
import java.io.IOException;
import java.security.Principal;
import java.util.List;

import java.util.stream.Collectors;


@RestController
@RequiredArgsConstructor
@RequestMapping("/archives")
Expand All @@ -49,6 +48,9 @@ public ResponseEntity<BaseResponse<ArchivePageRes>> getArchivesByCategory(
@RequestParam(value = "category", required = false)
String category,

@Parameter(description = "타이틀 검색")
@RequestParam(value = "title", required = false) String title,

@Parameter(description = "페이지 번호")
@Positive(message = "must be greater than 0")
@RequestParam(value = "page", defaultValue = "0")
Expand All @@ -60,8 +62,9 @@ public ResponseEntity<BaseResponse<ArchivePageRes>> getArchivesByCategory(
@RequestParam(value = "size", defaultValue = "20")
Integer pagingSize){

PageRequest pageRequest = PageRequest.of(pageNumber,pagingSize);
return ResponseEntity.ok(new BaseResponse<>(this.archiveService.getArchivesByCategory(category,pageRequest)));
PageRequest pageRequest = PageRequest.of(pageNumber, pagingSize);
ArchivePageRes archivePageRes = archiveService.getArchivesByCategoryAndTitle(category, title, pageRequest);
return ResponseEntity.ok(new BaseResponse<>(archivePageRes));
}

@Operation(summary = "편집 버튼 눌렀을 때 사용자와 일치하는지 체크 및 정보 반환", description = """
Expand Down Expand Up @@ -168,6 +171,7 @@ public ResponseEntity<BaseResponse<Long>> editArchive(
return ResponseEntity.ok(new BaseResponse<>(archiveService.editArchive(archiveEditReq)));

}

@Operation(summary = "자료실 정보 가져오기", description = """
포인트가 부족하면
\n
Expand Down Expand Up @@ -224,6 +228,7 @@ private ArchiveDtoRes convertToDto(Archive archive) {
dto.setWriter(archive.getWriter());
dto.setCreatedDate(archive.getCreatedAt());
return dto;

}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class ArchiveDetailRes {

private String hashtag;
private String body;

private Long previousId;
private Long nextId;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package kusitms.gallae.repository.archive;

import kusitms.gallae.domain.Archive;

import kusitms.gallae.domain.Review;
import kusitms.gallae.domain.User;
import kusitms.gallae.dto.user.UserPostDto;
import org.springframework.data.domain.Page;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand All @@ -19,4 +21,5 @@ public interface ArchiveRepository extends JpaRepository<Archive, Long> {

Page<Archive> findAllByOrderByLikesDesc(Pageable pageable);


}
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,37 @@ public class ArchiveRepositoryImpl implements ArchiveRespositoryCustom{

private final JPAQueryFactory jpaQueryFactory;


@Override
public Page<Archive> findArchiveDynamicCategory(String category, Pageable pageable) {
List<Archive> archives = this.jpaQueryFactory
public Page<Archive> findArchiveDynamicCategory(String category, String title, Pageable pageable) {
BooleanBuilder condition = createArchiveCondition(category, title);

List<Archive> archives = jpaQueryFactory
.selectFrom(archive)
.where(createArchiveCondition(category))
.orderBy(new OrderSpecifier<>(Order.DESC,archive.createdAt))
.where(condition)
.orderBy(new OrderSpecifier<>(Order.DESC, archive.createdAt))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();

Long totalSize = this.jpaQueryFactory
Long totalSize = jpaQueryFactory
.select(Wildcard.count)
.from(archive)
.where(createArchiveCondition(category))
.where(condition)
.fetchOne();

return new PageImpl<>(archives, pageable, Objects.requireNonNull(totalSize));
}

private BooleanBuilder createArchiveCondition(String category) {
private BooleanBuilder createArchiveCondition(String category, String title) {
BooleanBuilder booleanBuilder = new BooleanBuilder();

if(category != null) {
if (category != null) {
booleanBuilder.and(archive.category.eq(category));
}
if (title != null && !title.trim().isEmpty()) {
booleanBuilder.and(archive.title.contains(title));
}

return booleanBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

public interface ArchiveRespositoryCustom {

Page<Archive> findArchiveDynamicCategory(String category, Pageable pageable);
Page<Archive> findArchiveDynamicCategory(String category, String title, Pageable pageable);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import kusitms.gallae.dto.archive.*;
import kusitms.gallae.dto.review.ReviewEditReq;
import kusitms.gallae.global.S3Service;

import kusitms.gallae.repository.archive.ArchiveRepository;
import kusitms.gallae.repository.archive.ArchiveRespositoryCustom;
import kusitms.gallae.repository.favoriteArchiveRepository.FavoriteArchiveRepository;
Expand Down Expand Up @@ -50,8 +51,8 @@ public class ArchiveService {
@Autowired
private S3Service s3Service;

public ArchivePageRes getArchivesByCategory(String category, Pageable pageable) {
Page<Archive> archives = archiveRespositoryCustom.findArchiveDynamicCategory(category,pageable);
public ArchivePageRes getArchivesByCategoryAndTitle(String category, String title, Pageable pageable) {
Page<Archive> archives = archiveRespositoryCustom.findArchiveDynamicCategory(category,title, pageable);
List<ArchiveDtoRes> archiveDtos = archives.getContent().stream()
.map(archive -> {
ArchiveDtoRes archiveDtoRes =new ArchiveDtoRes();
Expand Down Expand Up @@ -176,6 +177,7 @@ public Long getNextArchiveId(Long currentId) {
.orElse(null);
}


public Page<Archive> getAllArchivesSortedByLikes(Pageable pageable) {
return archiveRepository.findAllByOrderByLikesDesc(pageable);
}
Expand Down

0 comments on commit c2ea18a

Please sign in to comment.