Skip to content

Commit bc09ac7

Browse files
authored
Merge pull request #1 from MinCodeHub/refactor/spec-query
Refactor: Specification → QueryDSL 변환 및 + 도메인별 Enum 분리
2 parents d64b8af + f7ab129 commit bc09ac7

File tree

17 files changed

+4090
-43
lines changed

17 files changed

+4090
-43
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ RUN chmod +x gradlew && ./gradlew --version && ./gradlew clean build -x test --s
77

88
FROM bellsoft/liberica-openjdk-alpine:17
99
WORKDIR /app
10-
COPY --from=build /app/build/libs/*.jar app.jar
10+
COPY --from=build /app/build/libs/api-0.0.1-SNAPSHOT.jar app.jar
1111

1212
VOLUME /tmp
1313
VOLUME /logs

build.gradle

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,22 @@ dependencies {
6767

6868
// Thumbnailator
6969
implementation 'net.coobird:thumbnailator:0.4.8'
70+
71+
//QueryDSL
72+
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
73+
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
74+
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
75+
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
76+
}
77+
78+
def querydslDir = layout.buildDirectory.dir("generated/querydsl")
79+
80+
sourceSets {
81+
main {
82+
java {
83+
srcDirs += querydslDir
84+
}
85+
}
7086
}
7187

7288
tasks.named('test') {

docker-compose.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: "3.8"
2-
31
services:
42
mysql:
53
image: mysql:8.0

spy.log

Lines changed: 3719 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package site.talent_trade.api.config;
2+
3+
import com.querydsl.jpa.impl.JPAQueryFactory;
4+
import jakarta.persistence.EntityManager;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import site.talent_trade.api.repository.member.MemberQueryRepository;
8+
import site.talent_trade.api.repository.member.MemberQueryRepositoryImpl;
9+
10+
@Configuration
11+
public class QuerydslConfig {
12+
13+
@Bean
14+
public JPAQueryFactory jpaQueryFactory(EntityManager em) {
15+
return new JPAQueryFactory(em);
16+
}
17+
}

src/main/java/site/talent_trade/api/controller/community/PostController.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import jakarta.servlet.http.HttpServletRequest;
44
import lombok.RequiredArgsConstructor;
55
import lombok.extern.slf4j.Slf4j;
6-
import org.springframework.beans.factory.annotation.Autowired;
76
import org.springframework.web.bind.annotation.*;
8-
import site.talent_trade.api.domain.community.SortBy;
9-
import site.talent_trade.api.domain.member.Talent;
7+
import site.talent_trade.api.domain.community.CommunitySortBy;
108
import site.talent_trade.api.dto.commnuity.request.PostRequestDTO;
119
import site.talent_trade.api.dto.commnuity.response.PostDetailDTO;
1210
import site.talent_trade.api.dto.commnuity.response.PostResponseDTO;
@@ -32,11 +30,11 @@ public class PostController {
3230
@GetMapping("/get")
3331
public ResponseDTO<List<PostResponseDTO>> getPostList(@RequestParam(value = "talent", required = false) String talent,
3432
@RequestParam(value = "keyword", required = false) String keyword,
35-
@RequestParam(value = "sortBy", defaultValue = "LATEST") SortBy sortBy) {
33+
@RequestParam(value = "communitySortBy", defaultValue = "LATEST") CommunitySortBy communitySortBy) {
3634
log.info("talent: "+talent);
37-
log.info("sortBy: "+sortBy);
35+
log.info("sortBy: "+ communitySortBy);
3836
// 게시글 검색 및 필터링
39-
return postService.getPostList(talent, keyword, sortBy);
37+
return postService.getPostList(talent, keyword, communitySortBy);
4038
}
4139

4240
// 게시글 작성(jwt 인증 필요)

src/main/java/site/talent_trade/api/controller/mainpage/MainPageController.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import org.springframework.web.bind.annotation.RequestMapping;
88
import org.springframework.web.bind.annotation.RequestParam;
99
import org.springframework.web.bind.annotation.RestController;
10-
import site.talent_trade.api.domain.community.SortBy;
10+
import site.talent_trade.api.domain.community.CommunitySortBy;
11+
import site.talent_trade.api.domain.member.MemberSortBy;
1112
import site.talent_trade.api.domain.member.Talent;
1213
import site.talent_trade.api.dto.member.response.MemberListDTO;
1314
import site.talent_trade.api.dto.member.response.MemberPageDTO;
@@ -33,17 +34,38 @@ public ResponseDTO<MemberListDTO> recommendMembers(HttpServletRequest httpServle
3334
public ResponseDTO<MemberPageDTO> getMainPage(HttpServletRequest httpServletRequest,
3435
@RequestParam(name = "page", defaultValue = "0") int page,
3536
@RequestParam(name = "talent", required = false) @Nullable Talent talent,
36-
@RequestParam(name = "sortBy", required = false) @Nullable SortBy sortBy) {
37+
@RequestParam(name = "memberSortBy", required = false) @Nullable MemberSortBy memberSortBy) {
3738
Long memberId = jwtProvider.validateToken(httpServletRequest);
38-
return mainPageService.getMainPageMembers(memberId, page, talent, sortBy);
39+
return mainPageService.getMainPageMembers(memberId, page, talent, memberSortBy);
3940
}
4041

41-
@GetMapping("/search")
42+
//specification쓴거
43+
@GetMapping("/search-spec")
4244
public ResponseDTO<MemberPageDTO> searchMembers(HttpServletRequest httpServletRequest,
4345
@RequestParam(name = "page", defaultValue = "0") int page,
44-
@RequestParam(name = "sortBy", required = false) @Nullable SortBy sortBy,
46+
@RequestParam(name = "memberSortBy", required = false) @Nullable MemberSortBy memberSortBy,
4547
@RequestParam(name = "keyword", required = false) @Nullable String query) {
4648
Long memberId = jwtProvider.validateToken(httpServletRequest);
47-
return mainPageService.searchMembers(memberId, page, sortBy, query);
49+
return mainPageService.searchSpecificationMembers(memberId, page, memberSortBy, query);
4850
}
51+
52+
@GetMapping("/search")
53+
public ResponseDTO<MemberPageDTO> searchMembers(
54+
HttpServletRequest httpServletRequest,
55+
@RequestParam(name = "page", defaultValue = "0") int page,
56+
@RequestParam(name = "talent", required = false) @Nullable Talent talent,
57+
@RequestParam(name = "keyword", required = false) @Nullable String keyword,
58+
@RequestParam(name = "memberSortBy", required = false) @Nullable MemberSortBy memberSortBy
59+
) {
60+
Long memberId = jwtProvider.validateToken(httpServletRequest);
61+
62+
return mainPageService.searchMembers(
63+
memberId,
64+
page,
65+
talent,
66+
keyword,
67+
memberSortBy
68+
);
69+
}
70+
4971
}

src/main/java/site/talent_trade/api/domain/community/SortBy.java renamed to src/main/java/site/talent_trade/api/domain/community/CommunitySortBy.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package site.talent_trade.api.domain.community;
22

3-
public enum SortBy {
3+
public enum CommunitySortBy {
44
//커뮤니티 필터링
55
LATEST, //최신글 순
66
HTI_COUNT, //조회 순
77
COMMENT_COUNT, //댓글 순
88
RECENT_MEMBER, //최근 가입자 순
9-
REVIEW, //리뷰 개수 순
10-
SCORE //평점 높은 순
119
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package site.talent_trade.api.domain.member;
2+
3+
public enum MemberSortBy {
4+
REVIEW, //리뷰 개수 순
5+
SCORE //평점 높은 순
6+
}

src/main/java/site/talent_trade/api/domain/member/MemberSpecification.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@
22

33
import jakarta.persistence.criteria.JoinType;
44
import org.springframework.data.jpa.domain.Specification;
5-
import site.talent_trade.api.domain.community.SortBy;
65

76
public class MemberSpecification {
87

9-
public static Specification<Member> orderBy(SortBy sortBy) {
10-
if (sortBy == null) {
8+
public static Specification<Member> orderBy(MemberSortBy memberSortBy) {
9+
if (memberSortBy == null) {
1110
return null;
1211
}
13-
return switch (sortBy) {
12+
return switch (memberSortBy) {
1413
case REVIEW -> orderByReviewCnt();
1514
case SCORE -> orderByScoreAvg();
1615
default -> orderByCreatedAt();
1716
};
1817
}
19-
2018
private static Specification<Member> orderByCreatedAt() {
2119
return (root, query, criteriaBuilder) -> {
2220
if (query == null) {

0 commit comments

Comments
 (0)