Skip to content

Commit ace01e0

Browse files
refactor: Pomodoro, StudyLog 기능 전반 Kotlin 마이그레이션(#120)
* feat: PomodoroQueryService.kt, PomodoroCommandService.kt 구현 * feat: PomodoroRepository.kt, PomodoroJpaRepository.kt, PomodoroRepositoryAdapter.kt 구현 * feat: PomodoroErrorCode.kt, PomodoroPolicy.kt 구현 * feat: PomodoroFactory.kt 구현 * feat: StudyLogController.kt 구현 * feat: StudyLogFacade.kt 구현 * feat: StudyLogQueryService.kt, StudyLogCommandService.kt 구현 * feat: StudyLogRepository.kt, StudyLogJpaRepository.kt, StudyLogRepositoryAdapter.kt 구현 * feat: StudyLogErrorCode, StudyLogPolicy 구현 * feat: StudyLogFactory.kt 구현 * feat: CreatePomodoroRequest.kt DTO 추가 * feat: PomodoroInfo.kt DTO 추가 * feat: CreateStudyLogRequest.kt, PresignStudyLogImageRequest.kt, ConfirmStudyLogImageRequest.kt DTO 추가 * feat: CreateStudyLogResponse.kt, PresignedStudyLogImageResponse.kt, LoadStudyLogsSliceResponse.kt DTO 추가 * feat: StudyLogInfo.kt, StudyLogDetail.kt, StudyLogSliceInfo.kt, PresignedStudyLogImageInfo.kt DTO 추가 * refactor: Kotlin–Java 혼용 환경에서 안정적인 접근을 위해 도메인 엔티티에 명시적 getter 추가 * refactor: Kotlin–Java 혼용 환경에서 안정적인 접근을 위해 BaseTimeEntity에 명시적 getter 추가 * refactor: record → data class 전환에 따른 DTO 접근자 호출 방식(x() → getX()) 수정 * refactor: Policy에서 삭제 여부 판단을 위해 BaseTimeEntity에 isDeleted 메서드 추가 * refactor: java pomodoro presentation, application 패키지 제거 (Kotlin 마이그레이션 완료) * refactor: java pomodoro domain factory, policy, error 패키지 제거 (Kotlin 마이그레이션 완료) * refactor: java pomodoro infra jpa 패키지 제거 (Kotlin 마이그레이션 완료) * refactor: java studyLog presentation 패키지 제거 (Kotlin 마이그레이션 완료) * refactor: java studyLog application facade 패키지 제거 (Kotlin 마이그레이션 완료) * refactor: java studyLog domain error, policy 패키지 제거 (Kotlin 마이그레이션 완료) * test: PomodoroFixture.kt, CreatePomodoroRequestFixture.kt 추가 * test: PomodoroTestHelper.kt 추가 * test: PomodoroQueryServiceTest.kt, PomodoroCommandServiceTest.kt 단위 테스트 추가 * test: test java pomodoro 패키지 제거 (Kotlin 마이그레이션 완료) * test: StudyLogFixture.kt, CreateStudyLogRequestFixture.kt, PresignStudyLogImageRequestFixture.kt, ConfirmStudyLogImageRequestFixture.kt 추가 * test: StudyLogTestHelper.kt 추가 * test: StudyLogQueryServiceTest, StudyLogCommandServiceTest 단위 테스트 추가 * test: StudyLogControllerIntegrationTest 통합 테스트 추가 * test: TokenFixture에 authorization 정적 메서드 추가 * test: StampTestHelper에 getStamp 정적 메서드 추가 * chore: build.gradle에 Kotlin 환경 설정 추가 * chore: build.gradle에 Spotless Kotlin 포맷팅 설정 추가
1 parent 3de9eae commit ace01e0

103 files changed

Lines changed: 3205 additions & 2975 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.gradle

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ plugins {
22
id 'java'
33
id 'org.springframework.boot' version '3.5.0'
44
id 'io.spring.dependency-management' version '1.1.7'
5-
id 'com.diffplug.spotless' version '6.21.0'
5+
id 'com.diffplug.spotless' version '8.1.0'
66
id 'org.flywaydb.flyway' version '11.11.2'
7-
id 'org.jetbrains.kotlin.jvm'
7+
id 'org.jetbrains.kotlin.jvm' version '2.2.21'
8+
id 'org.jetbrains.kotlin.plugin.spring' version '2.2.21'
9+
id 'org.jetbrains.kotlin.plugin.jpa' version '2.2.21'
10+
// id 'org.jetbrains.kotlin.kapt' version '2.2.21'
811
}
912

1013
group = 'com.ject'
@@ -52,6 +55,11 @@ dependencies {
5255
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
5356
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
5457

58+
// Querydsl (Kotlin용 – kapt 추가, Java용 Querydsl과 충돌이 발생하여 주석 처리)
59+
// kapt "com.querydsl:querydsl-apt:5.0.0:jakarta"
60+
// kapt "jakarta.annotation:jakarta.annotation-api"
61+
// kapt "jakarta.persistence:jakarta.persistence-api"
62+
5563
// Redis
5664
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
5765

@@ -71,14 +79,20 @@ dependencies {
7179
// Tika : 이미지 타입 검사
7280
implementation 'org.apache.tika:tika-core:2.5.0'
7381

82+
// Kotlin
83+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
84+
implementation "org.jetbrains.kotlin:kotlin-reflect"
85+
implementation "com.fasterxml.jackson.module:jackson-module-kotlin"
86+
testImplementation "org.jetbrains.kotlin:kotlin-test"
87+
7488
// Test
7589
testImplementation 'org.springframework.boot:spring-boot-starter-test'
7690
testImplementation 'org.springframework.batch:spring-batch-test'
7791
testImplementation 'org.springframework.security:spring-security-test'
7892
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
7993
testImplementation 'org.mockito:mockito-core'
8094
testImplementation 'org.mockito:mockito-junit-jupiter'
81-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
95+
testImplementation "org.mockito.kotlin:mockito-kotlin:6.1.0"
8296
}
8397

8498
jar.enabled = false // 일반 JAR 파일 생성 비활성화
@@ -96,6 +110,13 @@ spotless {
96110
endWithNewline() // 파일 끝부분 개행 처리
97111
googleJavaFormat().aosp() // google java format 스타일 적용
98112
}
113+
114+
kotlin {
115+
target("**/*.kt") // 모든 .kt 파일에 적용
116+
ktlint("1.8.0") // Kotlin 코드 스타일 검사 및 자동 포맷팅
117+
trimTrailingWhitespace() // 공백 제거
118+
endWithNewline() // 파일 끝부분 개행 처리
119+
}
99120
}
100121

101122
// pre-commit spotless check script

src/main/java/com/ject/studytrip/global/common/entity/BaseTimeEntity.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
import jakarta.persistence.EntityListeners;
55
import jakarta.persistence.MappedSuperclass;
66
import java.time.LocalDateTime;
7-
import lombok.Getter;
87
import org.springframework.data.annotation.CreatedDate;
98
import org.springframework.data.annotation.LastModifiedDate;
109
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
1110

1211
@EntityListeners(AuditingEntityListener.class)
1312
@MappedSuperclass
14-
@Getter
1513
public abstract class BaseTimeEntity {
1614

1715
@CreatedDate
@@ -21,4 +19,20 @@ public abstract class BaseTimeEntity {
2119
@LastModifiedDate private LocalDateTime updatedAt;
2220

2321
protected LocalDateTime deletedAt;
22+
23+
public boolean isDeleted() {
24+
return deletedAt != null;
25+
}
26+
27+
public LocalDateTime getCreatedAt() {
28+
return createdAt;
29+
}
30+
31+
public LocalDateTime getUpdatedAt() {
32+
return updatedAt;
33+
}
34+
35+
public LocalDateTime getDeletedAt() {
36+
return deletedAt;
37+
}
2438
}

src/main/java/com/ject/studytrip/member/domain/model/Member.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
@Entity
1111
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1212
@AllArgsConstructor(access = AccessLevel.PRIVATE)
13-
@Getter
1413
@Builder(access = AccessLevel.PRIVATE)
1514
public class Member extends BaseTimeEntity {
1615

@@ -74,4 +73,36 @@ public void updateProfileImage(String profileImage) {
7473
public void updateDeletedAt() {
7574
this.deletedAt = LocalDateTime.now();
7675
}
76+
77+
public MemberCategory getCategory() {
78+
return category;
79+
}
80+
81+
public String getEmail() {
82+
return email;
83+
}
84+
85+
public Long getId() {
86+
return id;
87+
}
88+
89+
public String getNickname() {
90+
return nickname;
91+
}
92+
93+
public String getProfileImage() {
94+
return profileImage;
95+
}
96+
97+
public MemberRole getRole() {
98+
return role;
99+
}
100+
101+
public String getSocialId() {
102+
return socialId;
103+
}
104+
105+
public SocialProvider getSocialProvider() {
106+
return socialProvider;
107+
}
77108
}

src/main/java/com/ject/studytrip/mission/domain/model/DailyMission.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
@Entity
1010
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1111
@AllArgsConstructor(access = AccessLevel.PRIVATE)
12-
@Getter
1312
@Builder(access = AccessLevel.PRIVATE)
1413
public class DailyMission extends BaseTimeEntity {
1514

@@ -32,4 +31,16 @@ public static DailyMission of(Mission mission, DailyGoal dailyGoal) {
3231
public void updateDeletedAt() {
3332
this.deletedAt = LocalDateTime.now();
3433
}
34+
35+
public DailyGoal getDailyGoal() {
36+
return dailyGoal;
37+
}
38+
39+
public Long getId() {
40+
return id;
41+
}
42+
43+
public Mission getMission() {
44+
return mission;
45+
}
3546
}

src/main/java/com/ject/studytrip/mission/domain/model/Mission.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
@Entity
1212
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1313
@AllArgsConstructor(access = AccessLevel.PRIVATE)
14-
@Getter
1514
@Builder(access = AccessLevel.PRIVATE)
1615
public class Mission extends BaseTimeEntity {
1716

@@ -43,4 +42,20 @@ public void updateDeletedAt() {
4342
public void updateCompleted() {
4443
this.completed = true;
4544
}
45+
46+
public boolean isCompleted() {
47+
return completed;
48+
}
49+
50+
public Long getId() {
51+
return id;
52+
}
53+
54+
public String getName() {
55+
return name;
56+
}
57+
58+
public Stamp getStamp() {
59+
return stamp;
60+
}
4661
}

src/main/java/com/ject/studytrip/pomodoro/application/dto/PomodoroInfo.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroCommandService.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroQueryService.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/main/java/com/ject/studytrip/pomodoro/domain/error/PomodoroErrorCode.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/main/java/com/ject/studytrip/pomodoro/domain/factory/PomodoroFactory.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)