Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
11a4468
feat: springmockk 의존성 추가
hyxklee Jan 23, 2026
03f29f2
refactor: 컨텍스트 업데이트
hyxklee Jan 23, 2026
5808d2a
feat: 헬스 체크 컨트롤러 마이그레이션
hyxklee Jan 23, 2026
6dee780
feat: 공통 응답 인터페이스 마이그레이션
hyxklee Jan 23, 2026
1f03a72
feat: 공통 페이징 객체 마이그레이션
hyxklee Jan 23, 2026
ba619ba
feat: 공통 응답 객체 마이그레이션
hyxklee Jan 23, 2026
5dcf1bc
feat: 공통 페이징 객체 마이그레이션
hyxklee Jan 23, 2026
72427bb
feat: 공통 예외 마이그레이션
hyxklee Jan 23, 2026
21c328f
feat: 에러코드 마이그레이션
hyxklee Jan 23, 2026
7c31ce9
feat: 전역 예외 핸들러 마이그레이션
hyxklee Jan 23, 2026
5699430
feat: 리소스 락 예외 마이그레이션
hyxklee Jan 23, 2026
023da48
feat: 예외 응답 마이그레이션
hyxklee Jan 23, 2026
1c9186f
feat: claude commands 추가
hyxklee Jan 23, 2026
765b01c
refactor: 코틀린 마이그레이션 에이전트 컨텍스트 보강(테스트관련)
hyxklee Jan 23, 2026
dacd658
refactor: 예외설정 오류 수정
hyxklee Jan 23, 2026
c0aa312
refactor: 에이전트 컨텍스트 업데이트
hyxklee Jan 23, 2026
14eea48
refactor: Kotest 스타일 명세 업데이트
hyxklee Jan 27, 2026
127aaf4
refactor: Springmockk 호환 버전으로 다운그레이드
hyxklee Jan 27, 2026
cdcf2f3
refactor: 간단한 테스트의 경우 StringSpec으로 변경
hyxklee Jan 27, 2026
f5ff38d
refactor: SKILL.md 피드백에 맞게 수정
hyxklee Jan 27, 2026
d7614be
Merge branch 'dev' into refactor/LNK-67-Leenk-global-common-코틀린-마이그레이션
hyxklee Jan 27, 2026
064ce29
.java을(를) .kt(으)로 이름 변경
hyxklee Jan 27, 2026
e376b90
chore: 충돌 해결 및 코틀린 마이그레이션
hyxklee Jan 27, 2026
d1b9f70
chore: 충돌 해결 및 코틀린 마이그레이션
hyxklee Jan 27, 2026
78f273e
refactor: 오타 수정
hyxklee Jan 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,14 @@ refactor: dto validation 수정
## Testing

- **Kotest** + **MockK** for unit tests
- **springmockk** for Spring bean mocking - use `@MockkBean` instead of `@MockBean`
- **Testcontainers** for integration tests (MySQL, MongoDB)
- Test both success and failure scenarios
- Use `@DisplayName` for clear test descriptions
- Use Kotest's `describe`/`context`/`it` for test structure
- Controller tests: Use `@WebMvcTest` with `@Import` for Security config testing

## Notes

- Swagger UI: `/swagger-ui.html`
- Profiles: `local` (default), `dev`
- Auth: OAuth2 Resource Server with JWT (Apple via Kakao)
- Auth: OAuth2 Resource Server with JWT (Apple via Kakao)
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ dependencies {
testImplementation("org.testcontainers:mysql")
testImplementation("org.testcontainers:mongodb")
testImplementation("io.mockk:mockk:1.14.7")
testImplementation("com.ninja-squad:springmockk:5.0.1")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")

// Kotest
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package leets.leenk.global.common.controller

import io.swagger.v3.oas.annotations.Hidden
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@Hidden
@RestController
class StatusCheckController {
@GetMapping("/health-check")
fun checkHealthStatus(): ResponseEntity<String> = ResponseEntity.ok<String>("OK")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package leets.leenk.global.common.dto

import com.fasterxml.jackson.annotation.JsonInclude
import io.swagger.v3.oas.annotations.media.Schema

@JsonInclude(JsonInclude.Include.NON_NULL)
data class CommonPageableResponse(
@field:Schema(description = "페이지 번호 (0부터 시작)", example = "0")
val pageNumber: Int,
@field:Schema(description = "페이지 크기", example = "10")
val pageSize: Int,
@field:Schema(description = "현재 페이지의 요소 개수", example = "10")
val numberOfElements: Int,
@field:Schema(description = "다음 페이지 존재 여부", example = "true")
val hasNext: Boolean,
@field:Schema(description = "현재 페이지의 요소가 비어 있는지의 여부", example = "false")
val empty: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package leets.leenk.global.common.dto

import org.springframework.data.domain.Page
import org.springframework.data.domain.Slice

object PageableMapperUtil {
@JvmStatic
fun from(slice: Slice<*>): CommonPageableResponse =
CommonPageableResponse(
pageNumber = slice.number,
pageSize = slice.size,
numberOfElements = slice.numberOfElements,
hasNext = slice.hasNext(),
empty = slice.isEmpty,
)

@JvmStatic
fun from(page: Page<*>): CommonPageableResponse =
CommonPageableResponse(
pageNumber = page.number,
pageSize = page.size,
numberOfElements = page.numberOfElements,
hasNext = page.hasNext(),
empty = page.isEmpty,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package leets.leenk.global.common.exception

abstract class BaseException
@JvmOverloads
constructor(
val errorCode: ErrorCodeInterface,
message: String? = null,
) : RuntimeException(message ?: errorCode.message)
Loading