diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 8c809f7..f01b8f7 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -16,6 +16,10 @@ server { location / { return 301 https://$host$request_uri; } + + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + client_max_body_size 600M; } @@ -34,6 +38,11 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } + + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + client_max_body_size 600M; + } diff --git a/src/main/java/com/teamh/khumon/repository/LearningMaterialRepository.java b/src/main/java/com/teamh/khumon/repository/LearningMaterialRepository.java index 37c8414..6b15e85 100644 --- a/src/main/java/com/teamh/khumon/repository/LearningMaterialRepository.java +++ b/src/main/java/com/teamh/khumon/repository/LearningMaterialRepository.java @@ -1,9 +1,12 @@ package com.teamh.khumon.repository; import com.teamh.khumon.domain.LearningMaterial; +import jakarta.persistence.criteria.Predicate; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -13,5 +16,7 @@ public interface LearningMaterialRepository extends JpaRepository findAllByTitleIsContainingAndMemberId(String search, Long memberId, Pageable pageable); +// Page findAllByTitleIsContainingAndMemberId(String search, Long memberId, Pageable pageable); + + Page findAll(Specification specification, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/teamh/khumon/service/LearningMaterialService.java b/src/main/java/com/teamh/khumon/service/LearningMaterialService.java index 4581ffb..73c4f9a 100644 --- a/src/main/java/com/teamh/khumon/service/LearningMaterialService.java +++ b/src/main/java/com/teamh/khumon/service/LearningMaterialService.java @@ -11,11 +11,13 @@ import com.teamh.khumon.util.AmazonS3Util; import com.teamh.khumon.util.MediaUtil; import com.teamh.khumon.util.ObjectToDtoUtil; +import jakarta.persistence.criteria.*; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -126,9 +128,9 @@ public ResponseEntity getLearningMaterials(Principal principal, Pageable page log.info("search : " + search); Member member = memberRepository.findByUsername(principal.getName()).orElseThrow(); log.info("member ID : " + member.getId()); - //log.info(learningMaterialRepository.findAllByMemberId(member.getId()).toString()); - Page learningMaterials = learningMaterialRepository.findAllByTitleIsContainingAndMemberId(search, member.getId() , pageable); - //log.info(learningMaterials.getContent().toString()); + Specification specification = search(search, member.getId()); + Page learningMaterials = learningMaterialRepository.findAll(specification, pageable); + List learningMaterialContents = learningMaterials.getContent().stream().map(learningMaterial -> LearningMaterialContent.builder() .id(learningMaterial.getId()) .title(learningMaterial.getTitle()) @@ -181,4 +183,17 @@ public ResponseEntity delete(Principal principal, Long id) { return new ResponseEntity(HttpStatus.OK); } + private Specification search(String kw, Long memberId) { + return (Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) -> { + criteriaQuery.distinct(true); // 중복을 제거 + root.join("member", JoinType.INNER); + Predicate memberIdPredicate = criteriaBuilder.equal(root.get("member").get("id"), memberId); + Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(root.get("title"), "%" + kw + "%"), // 제목 + criteriaBuilder.like(root.get("content"), "%" + kw + "%"), // 내용 + criteriaBuilder.like(root.get("summary"), "%" + kw + "%")); //script + return criteriaBuilder.and(memberIdPredicate, searchPredicate); + + }; + } + } \ No newline at end of file