Skip to content

Commit 23060ec

Browse files
authored
Merge pull request #188 from teamterning/staging
[🔀 merge] [3차] 코드 리펙토링 사항 적용
2 parents 995958d + a4ade93 commit 23060ec

File tree

18 files changed

+1051
-80
lines changed

18 files changed

+1051
-80
lines changed

build.gradle

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,41 @@ ext {
2323

2424
dependencies {
2525

26-
//default
26+
// Spring Boot 기본 의존성
2727
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
2828
implementation 'org.springframework.boot:spring-boot-starter-web'
29+
implementation 'org.springframework.boot:spring-boot-starter-aop'
30+
implementation 'org.springframework.boot:spring-boot-starter-security'
31+
implementation 'org.springframework.boot:spring-boot-starter-actuator'
32+
33+
// Lombok
2934
compileOnly 'org.projectlombok:lombok'
3035
annotationProcessor 'org.projectlombok:lombok'
36+
37+
// 테스트 의존성
3138
testImplementation 'org.springframework.boot:spring-boot-starter-test'
3239
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
3340

34-
//postgresql
41+
// PostgreSQL
3542
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
3643

37-
//swagger
44+
// Swagger
3845
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
3946

40-
//Health-check
41-
implementation 'org.springframework.boot:spring-boot-starter-actuator'
42-
43-
//QueryDSL
47+
// QueryDSL
4448
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
4549
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
4650
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
4751
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
4852

49-
//validation
50-
// implementation 'ort.springframework.boot:spring-boot-starter-validation'
51-
52-
//JWT
53+
// JWT
5354
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
5455
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
5556
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
56-
implementation 'com.nimbusds:nimbus-jose-jwt:3.10'
57-
58-
// security
59-
implementation 'org.springframework.boot:spring-boot-starter-security'
57+
// implementation 'com.nimbusds:nimbus-jose-jwt:3.10'
6058

61-
// gson
59+
// Gson
6260
implementation 'com.google.code.gson:gson:2.8.6'
63-
64-
implementation 'org.springframework.boot:spring-boot-starter-aop'
65-
6661
}
6762

6863
//QueryDSL 초기 설정

src/main/java/org/terning/terningserver/controller/HomeController.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.terning.terningserver.controller;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.springframework.data.domain.Pageable;
5+
import org.springframework.data.web.PageableDefault;
46
import org.springframework.http.ResponseEntity;
57
import org.springframework.security.core.annotation.AuthenticationPrincipal;
68
import org.springframework.web.bind.annotation.*;
@@ -27,14 +29,12 @@ public class HomeController implements HomeSwagger {
2729
public ResponseEntity<SuccessResponse<HomeAnnouncementsResponseDto>> getAnnouncements(
2830
@AuthenticationPrincipal Long userId,
2931
@RequestParam(value = "sortBy", required = false, defaultValue = "deadlineSoon") String sortBy,
30-
@RequestParam("startYear") int startYear,
31-
@RequestParam("startMonth") int startMonth
32-
){
33-
HomeAnnouncementsResponseDto announcements = homeService.getAnnouncements(userId, sortBy, startYear, startMonth);
34-
32+
@PageableDefault(size = 10) Pageable pageable) {
33+
HomeAnnouncementsResponseDto announcements = homeService.getAnnouncements(userId, sortBy, pageable);
3534
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_ANNOUNCEMENTS, announcements));
3635
}
3736

37+
3838
@GetMapping("/home/upcoming")
3939
public ResponseEntity<SuccessResponse<List<UpcomingScrapResponseDto>>> getUpcomingScraps(
4040
@AuthenticationPrincipal Long userId

src/main/java/org/terning/terningserver/controller/swagger/HomeSwagger.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.swagger.v3.oas.annotations.Operation;
44
import io.swagger.v3.oas.annotations.tags.Tag;
5+
import org.springframework.data.domain.Pageable;
56
import org.springframework.http.ResponseEntity;
67
import org.terning.terningserver.dto.user.response.HomeAnnouncementsResponseDto;
78
import org.terning.terningserver.dto.user.response.UpcomingScrapResponseDto;
@@ -16,8 +17,7 @@ public interface HomeSwagger {
1617
ResponseEntity<SuccessResponse<HomeAnnouncementsResponseDto>> getAnnouncements(
1718
Long userId,
1819
String sortBy,
19-
int startYear,
20-
int startMonth
20+
Pageable pageable
2121
);
2222

2323
@Operation(summary = "홈화면 > 곧 마감인 스크랩 공고 조회", description = "곧 마감인 스크랩 공고를 조회하는 API")

src/main/java/org/terning/terningserver/domain/Filter.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import lombok.Getter;
77
import lombok.NoArgsConstructor;
88
import org.terning.terningserver.domain.enums.Grade;
9+
import org.terning.terningserver.domain.enums.JobType;
910
import org.terning.terningserver.domain.enums.WorkingPeriod;
10-
import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto;
1111

1212
import static lombok.AccessLevel.PROTECTED;
1313
import static jakarta.persistence.GenerationType.IDENTITY;
@@ -23,6 +23,9 @@ public class Filter {
2323
@GeneratedValue(strategy = IDENTITY)
2424
private Long id;
2525

26+
@Enumerated(EnumType.STRING)
27+
private JobType jobType;
28+
2629
@Enumerated(EnumType.STRING)
2730
private Grade grade;
2831

@@ -34,7 +37,8 @@ public class Filter {
3437
private int startMonth; // 근무 시작 월
3538

3639

37-
public void updateFilter(Grade grade, WorkingPeriod workingPeriod, int startYear, int startMonth) {
40+
public void updateFilter(JobType jobType, Grade grade, WorkingPeriod workingPeriod, int startYear, int startMonth) {
41+
this.jobType = jobType;
3842
this.grade = grade;
3943
this.workingPeriod = workingPeriod;
4044
this.startYear = startYear;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.terning.terningserver.domain.enums;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
import org.terning.terningserver.exception.CustomException;
6+
import org.terning.terningserver.exception.enums.ErrorMessage;
7+
8+
@Getter
9+
@RequiredArgsConstructor
10+
public enum JobType {
11+
TOTAL("total", "전체"),
12+
PLAN("plan", "기획/전략"),
13+
MARKETING("marketing", "마케팅/홍보"),
14+
ADMIN("admin", "사무/회계"),
15+
SALES("sales", "인사/영업"),
16+
DESIGN("design", "디자인/예술"),
17+
IT("it", "개발/IT"),
18+
RESEARCH("research", "연구/생산"),
19+
ETC("etc", "기타");
20+
21+
private final String key;
22+
private final String value;
23+
24+
public static JobType fromKey(String key) {
25+
for (JobType jobType : JobType.values()) {
26+
if (jobType.key.equalsIgnoreCase(key)) {
27+
return jobType;
28+
}
29+
}
30+
throw new CustomException(ErrorMessage.INVALID_JOB_TYPE);
31+
}
32+
33+
}

src/main/java/org/terning/terningserver/dto/filter/request/UpdateUserFilterRequestDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.terning.terningserver.dto.filter.request;
22

33
public record UpdateUserFilterRequestDto(
4+
String jobType,
45
String grade,
56
String workingPeriod,
67
int startYear,

src/main/java/org/terning/terningserver/dto/filter/response/UserFilterDetailResponseDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,17 @@
77

88
@Builder(access = PRIVATE)
99
public record UserFilterDetailResponseDto(
10+
String jobType,
1011
String grade,
1112
String workingPeriod,
1213
Integer startYear,
1314
Integer startMonth
1415
) {
1516
public static UserFilterDetailResponseDto of(final Filter userFilter) {
1617
return UserFilterDetailResponseDto.builder()
17-
.grade(userFilter == null ? null : userFilter.getGrade().getKey())
18-
.workingPeriod(userFilter == null ? null : userFilter.getWorkingPeriod().getKey())
18+
.jobType(userFilter == null || userFilter.getJobType() == null ? "total" : userFilter.getJobType().getKey())
19+
.grade(userFilter == null || userFilter.getGrade() == null ? null : userFilter.getGrade().getKey())
20+
.workingPeriod(userFilter == null || userFilter.getWorkingPeriod() == null ? null : userFilter.getWorkingPeriod().getKey())
1921
.startYear(userFilter == null ? null : userFilter.getStartYear())
2022
.startMonth(userFilter == null ? null : userFilter.getStartMonth())
2123
.build();

src/main/java/org/terning/terningserver/dto/user/response/HomeAnnouncementsResponseDto.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,20 @@
66

77
@Builder
88
public record HomeAnnouncementsResponseDto(
9-
int totalCount, // 필터링 된 공고 총 개수
9+
int totalPages,
10+
long totalCount,
11+
boolean hasNext,
1012
List<HomeResponseDto> result
1113
) {
12-
public static HomeAnnouncementsResponseDto of(final int totalCount, final List<HomeResponseDto> announcements){
14+
public static HomeAnnouncementsResponseDto of(
15+
final int totalPages,
16+
final long totalCount,
17+
final boolean hasNext,
18+
final List<HomeResponseDto> announcements) {
1319
return HomeAnnouncementsResponseDto.builder()
20+
.totalPages(totalPages)
1421
.totalCount(totalCount)
22+
.hasNext(hasNext)
1523
.result(announcements)
1624
.build();
1725
}

src/main/java/org/terning/terningserver/exception/enums/ErrorMessage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ public enum ErrorMessage {
1515
FAILED_TOKEN_REISSUE(404, "토큰 재발급에 실패하였습니다"),
1616
UNAUTHORIZED_JWT_EXCEPTION(401, "유효하지 않은 토큰입니다"),
1717

18-
// 사용자 필터링 정보 생성
18+
// 필터링
1919
FAILED_SIGN_UP_USER_FILTER_CREATION(404, "사용자 필터 생성에 실패하였습니다"),
2020
FAILED_SIGN_UP_USER_FILTER_ASSIGNMENT(404, "사용자 필터 연결에 실패하였습니다"),
21+
INVALID_JOB_TYPE(401, "유효하지 않은 직무 카테고리입니다."),
2122

2223
// 스크랩
2324
EXISTS_SCRAP_ALREADY(400, "이미 스크랩했습니다."),

src/main/java/org/terning/terningserver/repository/internship_announcement/InternshipRepositoryCustom.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.terning.terningserver.repository.internship_announcement;
22

3+
import com.querydsl.core.Tuple;
34
import org.springframework.data.domain.Page;
45
import org.springframework.data.domain.Pageable;
56
import org.terning.terningserver.domain.InternshipAnnouncement;
@@ -14,6 +15,7 @@ public interface InternshipRepositoryCustom {
1415

1516
Page<InternshipAnnouncement> searchInternshipAnnouncement(String keyword, String sortBy, Pageable pageable);
1617

17-
List<InternshipAnnouncement> findFilteredInternships(User user, String sortBy, int startYear, int startMonth);
18+
Page<Tuple> findFilteredInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable);
1819

20+
Page<Tuple> findAllInternshipsWithScrapInfo(User user, String sortBy, Pageable pageable);
1921
}

0 commit comments

Comments
 (0)