Skip to content

Conversation

@coehgns
Copy link
Contributor

@coehgns coehgns commented Dec 29, 2025

작업 상세

Equus-Application에서는 원서 생성, 각 educationalStatus에 맞게 info, case를 각 API가 분리되어있었지만, 현재 Entry 서비스는 한 API를 통해 원서 생성부터 제출까지 진행됩니다.

  • 원서 제출 흐름 구축: SubmitApplication 이벤트/프로듀서/컨슈머/유즈케이스/데이터 구조 추가 및 리팩터링.
  • 지원서 DTO 개선: SubmissionApplicationWebRequest 추가 및 필드/타입 정리(학번 자리수, YearMonth 등).
  • 그 외 리팩터링/유틸: GraduationInfoService, ApplicationCaseService 등 관련 리팩터와 보조 기능 추가.

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 통합된 원스텝 지원서 제출 프로세스 추가
  • Refactor

    • 지원서 관리 기능 단순화 및 통합
    • 복수 개의 개별 수정 엔드포인트를 단일 제출 워크플로우로 통합
    • 성적 데이터 필드 구조 개선

✏️ Tip: You can customize this high-level summary in your review settings.

…bmissionData에 gradeNumber, classNumber, studentNumber 추가
…tionInformation 메서드 실행 안되게 설젖ㅇ
coehgns added 20 commits January 1, 2026 13:44
…ion 메서드에 studentNumber.from을 사용하여 StudentNumber 객체로 변환하도록 변경
@coehgns
Copy link
Contributor Author

coehgns commented Jan 2, 2026

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Jan 2, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/presentation/dto/request/UpdateQualificationCaseWebRequest.kt (1)

10-28: 사용되지 않는 클래스는 삭제하는 것을 권장합니다.

클래스 상단에 "현재 사용되지 않음" 주석이 있고 실제로 사용되지 않는다면, 주석 처리하여 유지하는 것보다 완전히 제거하는 것이 코드베이스 유지보수에 더 좋습니다. 나중에 필요하면 Git 히스토리에서 복원할 수 있습니다.

🔍 제안하는 조치

이 파일을 완전히 삭제하고, 만약 이 클래스를 참조하는 코드가 남아있다면 함께 제거하세요.

#!/bin/bash
# 이 클래스에 대한 참조가 남아있는지 확인
rg -n "UpdateQualificationCaseWebRequest" --type=kotlin -C3
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/presentation/WebApplicationCaseAdapter.kt (1)

16-21: 사용되지 않는 의존성을 제거하세요.

updateGraduationCaseUseCaseupdateQualificationCaseUseCase가 생성자에 주입되어 있지만, 이들을 사용하는 엔드포인트(Lines 22-65)가 모두 주석 처리되어 실제로는 사용되지 않습니다.

🔍 제안하는 수정
 @RestController
 @RequestMapping("/score")
 class WebApplicationCaseAdapter(
-    private val updateGraduationCaseUseCase: UpdateGraduationCaseUseCase,
-    private val updateQualificationCaseUseCase: UpdateQualificationCaseUseCase,
     private val getGraduationCaseUseCase: GetGraduationCaseUseCase,
     private val getQualificationCaseUseCase: GetQualificationCaseUseCase,
 ) {

동시에 사용되지 않는 import 문도 제거하세요:

  • UpdateGraduationCaseUseCase
  • UpdateQualificationCaseUseCase
  • UpdateGraduationCaseRequest
  • UpdateQualificationCaseRequest
  • UpdateGraduationCaseWebRequest
  • UpdateQualificationCaseWebRequest
♻️ Duplicate comments (4)
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/SubmitApplicationWebRequest.kt (1)

1-26: 이전 리뷰 코멘트는 현재 코드와 무관합니다.

이전 리뷰에서 언급된 gedTech 필드가 현재 이 파일(Lines 1-26)에는 존재하지 않습니다. 현재 구조는 7개의 필수 필드로 깔끔하게 구성되어 있으며, 각 필드에 적절한 @NotNull 검증과 한국어 오류 메시지가 포함되어 있습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/SubmitApplicationRequest.kt (1)

1-11: 이전 리뷰 코멘트는 현재 코드와 무관합니다.

이전 리뷰에서 언급된 gedTech 필드 문제는 현재 코드(Lines 1-11)에서 확인되지 않습니다. 현재 SubmitApplicationRequest는 7개의 정보 객체로 깔끔하게 구성되어 있으며, 제출 플로우를 위한 명확한 집계 DTO 역할을 합니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/WebApplicationAdapter.kt (1)

22-30: LGTM! API 통합이 깔끔하게 완료되었습니다.

여러 개의 업데이트 엔드포인트가 단일 submitApplication 엔드포인트로 통합되었습니다. @Valid 어노테이션으로 요청 검증이 적용되어 있고, 이전 리뷰에서 언급된 breaking change는 프론트엔드 수정 예정으로 확인되었습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/service/ApplicationCaseService.kt (1)

20-25: 이전 리뷰 이슈가 해당되지 않습니다 (이벤트 발행 로직 제거됨).

이전 리뷰에서 applicationCaseEventPort에 업데이트 전 데이터가 전송되는 문제가 지적되었으나, 현재 코드에서는 이벤트 포트 의존성과 관련 호출이 제거되었습니다. 동기 처리 방식으로 전환하면서 의도적으로 제거된 것으로 보입니다.

🧹 Nitpick comments (9)
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/score/event/CreateScoreApplicationConsumer.kt (1)

14-40: 미사용 컴포넌트 정리 필요

모든 기능이 주석 처리되어 있지만 @Component는 활성 상태로 남아있어, Spring이 이 빈을 생성하고 의존성을 주입하지만 실제로는 아무 작업도 수행하지 않습니다.

다음 중 하나를 선택하여 정리하는 것을 권장합니다:

  • 더 이상 필요하지 않다면 클래스 전체를 삭제
  • 임시로 비활성화한 것이라면 명확한 TODO 주석 추가
  • @ConditionalOnProperty를 사용하여 설정 기반으로 활성화/비활성화
🔎 클래스 제거 제안

전체 파일을 삭제하거나, 임시 비활성화라면 다음과 같이 주석을 명확히 하세요:

+// TODO: 새로운 SubmitApplication 플로우로 마이그레이션 완료 후 제거 예정
+// 관련 이슈: #74
 @Component
 class CreateScoreApplicationConsumer (
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AddressInfoWebRequest.kt (1)

16-17: 우편번호 형식 검증 추가 권장

현재 postalCode는 비어있지 않은지만 확인하며, 한국 우편번호 형식(5자리 숫자)에 대한 검증이 없습니다. 잘못된 형식의 데이터가 입력될 수 있습니다.

🔎 형식 검증 추가 제안
+import javax.validation.constraints.Pattern
+
 data class AddressInfoWebRequest(
     @field:NotNull(message = "대전 지역 여부는 필수입니다")
     val isDaejeon: Boolean,
 
     @field:NotBlank(message = "주소는 필수입니다")
     val streetAddress: String,
 
     @field:NotBlank(message = "상세 주소는 필수입니다")
     val detailAddress: String,
 
     @field:NotBlank(message = "우편번호는 필수입니다")
+    @field:Pattern(regexp = "^\\d{5}$", message = "우편번호는 5자리 숫자여야 합니다")
     val postalCode: String
 )
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/SubmitApplicationConsumer.kt (1)

16-114: 미사용 컴포넌트 정리 필요

주석에 "미사용"이라고 표시되어 있고 모든 기능이 주석 처리되어 있지만, @Component 어노테이션이 활성화되어 있어 Spring이 이 빈을 생성하고 의존성을 주입합니다. 실제로는 아무 작업도 수행하지 않으면서 리소스를 소비합니다.

다음 중 하나를 선택하여 정리하세요:

  • 완전히 제거되었다면 클래스 전체를 삭제
  • 향후 재사용 가능성이 있다면 @ConditionalOnProperty를 사용하여 설정 기반으로 활성화/비활성화
  • Git 히스토리에 보존되므로 필요시 복원 가능

참고: 이전 리뷰에서 트랜잭션 관리 관련 지적이 있었으나, 현재 코드가 비활성화되어 해당 이슈는 더 이상 적용되지 않습니다.

🔎 조건부 활성화 예시

클래스를 유지하되 설정으로 제어하려면:

+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
+
+@ConditionalOnProperty(
+    name = ["application.event.submit-consumer.enabled"],
+    havingValue = "true",
+    matchIfMissing = false
+)
 @Component
 class SubmitApplicationConsumer(

application.yml에 추가:

application:
  event:
    submit-consumer:
      enabled: false
casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/SchoolInfoWebRequest.kt (1)

5-17: 형식 검증 추가 고려 권장

현재 @NotBlank로 필드의 존재 여부만 검증하고 있습니다. 다음 필드들은 추가 형식 검증을 고려해볼 수 있습니다:

  • schoolCode: 특정 형식이나 패턴이 있다면 @Pattern 추가
  • schoolPhone: 전화번호 형식 검증 (@Pattern 또는 커스텀 validator)

현재 구현으로도 기본 검증은 수행되지만, 형식 검증을 추가하면 더 명확한 오류 메시지를 제공할 수 있습니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/mapper/SubmitApplicationWebRequestMapper.kt (1)

13-73: 매핑 로직 유지보수성 개선 고려 (선택사항)

현재 명시적인 필드별 매핑은 타입 안전성과 명확성을 제공하지만, 60줄이 넘는 단순 복사 코드는 유지보수 부담이 될 수 있습니다. DTO 필드가 추가되거나 변경될 때 누락하기 쉽습니다.

선택적 개선 방안:

  • MapStruct와 같은 컴파일 타임 매핑 라이브러리 고려
  • 또는 현재 방식 유지 (명시성 우선)

현재 구현도 정상적으로 동작하며, 팀의 코드 스타일에 따라 선택하면 됩니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/ApplicantInfoWebRequest.kt (1)

14-15: 전화번호 형식 검증 추가를 고려하세요.

applicantTel과 parentTel 필드에 @notblank만 적용되어 있습니다. 전화번호 형식 검증을 위해 @pattern 제약을 추가하는 것을 고려해보세요.

🔎 예시 구현
     @field:NotBlank(message = "지원자 전화번호는 필수입니다")
+    @field:Pattern(regexp = "^01[0-9]-?[0-9]{3,4}-?[0-9]{4}$", message = "올바른 전화번호 형식이 아닙니다")
     val applicantTel: String,

parentTel에도 동일한 패턴을 적용할 수 있습니다.

Also applies to: 27-28

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/ApplicantInfo.kt (1)

10-14: 성별 필드의 타입 불일치

applicantGenderSex enum 타입을 사용하지만 guardianGenderString 타입입니다. 일관성을 위해 동일한 타입 사용을 권장합니다.

🔎 수정 제안
+import hs.kr.entrydsm.application.domain.application.model.types.Sex
+
 data class ApplicantInfo(
     val applicantName: String,
     val applicantTel: String,
     val birthDate: LocalDate,
     val applicantGender: Sex,
     val parentName: String,
     val parentTel: String,
     val parentRelation: String,
-    val guardianGender: String
+    val guardianGender: Sex
 )
casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/SubmitApplicationUseCase.kt (2)

47-51: 주석 처리된 코드 정리 권장

비동기 이벤트 처리 로직이 주석 처리되어 있습니다. 동기 처리로 결정된 이유가 주석으로 설명되어 있지만, 사용하지 않는 코드는 제거하고 결정 사항은 PR 설명이나 ADR에 문서화하는 것이 좋습니다.


63-64: 점수 생성 후 즉시 업데이트하는 패턴 검토

createScore로 점수를 생성한 직후 updateScore를 호출합니다. 두 작업을 하나의 메서드로 통합하거나, createScore에서 초기 점수 계산까지 수행하도록 리팩토링을 고려해 보세요.

🔎 대안 제안

ScoreService에 createAndCalculateScore(receiptCode: Long) 같은 통합 메서드를 추가하면 호출 측 코드가 간결해지고 의도가 명확해집니다:

// ScoreService
fun createAndCalculateScore(receiptCode: Long) {
    createScore(receiptCode)
    updateScore(receiptCode)
}

// SubmitApplicationUseCase
scoreService.createAndCalculateScore(receiptCode)
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between f29fa0c and d6d84f1.

📒 Files selected for processing (32)
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/spi/ApplicationEventPort.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/SubmitApplicationUseCase.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AddressInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/ApplicantInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/ApplicationInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AttendanceInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AwardAndCertificateInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/GradeInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/SchoolInfo.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/SubmitApplicationRequest.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/mapper/SubmitApplicationMapper.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/model/QualificationCase.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/service/ApplicationCaseService.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/usecase/dto/request/UpdateQualificationCaseRequest.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/graduationInfo/model/vo/StudentNumber.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/score/service/ScoreService.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/ApplicationProducer.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/SubmitApplicationConsumer.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/WebApplicationAdapter.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AddressInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/ApplicantInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/ApplicationInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AttendanceInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AwardAndCertificateInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/GradeInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/SchoolInfoWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/SubmitApplicationWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/mapper/SubmitApplicationWebRequestMapper.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/presentation/WebApplicationCaseAdapter.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/presentation/dto/request/UpdateQualificationCaseWebRequest.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/score/event/CreateScoreApplicationConsumer.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/pdf/data/PdfDataConverter.kt
🚧 Files skipped from review as they are similar to previous changes (4)
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/pdf/data/PdfDataConverter.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/model/QualificationCase.kt
  • casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/mapper/SubmitApplicationMapper.kt
  • casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/ApplicationProducer.kt
🔇 Additional comments (16)
casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AwardAndCertificateInfo.kt (1)

3-6: LGTM!

간결하고 명확한 DTO 구조입니다. Boolean 필드가 적절하게 사용되었고, 도메인 계층의 요청 DTO로서 올바르게 배치되었습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/SchoolInfo.kt (1)

3-8: LGTM!

학교 정보를 담는 DTO로서 명확하고 간결한 구조입니다. 도메인 계층의 요청 DTO로 적절하게 정의되었습니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AwardAndCertificateInfoWebRequest.kt (1)

5-11: 검증 로직 적절함

Kotlin의 Boolean은 기본적으로 non-nullable이지만, JSON 역직렬화 과정에서 null 값이 전달될 수 있으므로 @NotNull 검증은 적절합니다. 외부 요청에서 필수 필드 누락을 명확하게 검출할 수 있습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AddressInfo.kt (1)

3-8: 깔끔한 도메인 DTO 설계

불변 data class로 구현되어 있으며, 검증 로직은 웹 계층에 위임하는 명확한 관심사 분리가 잘 되어 있습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/AttendanceInfo.kt (1)

3-9: 구현이 적절합니다.

도메인 DTO로서 검증 로직 없이 깔끔하게 구현되었으며, 웹 계층에서 @PositiveOrZero 검증을 담당하는 구조가 적절합니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/AttendanceInfoWebRequest.kt (1)

5-20: 검증 로직이 적절하게 적용되었습니다.

모든 출결 필드에 @PositiveOrZero 제약이 적용되어 음수 값을 방지하고 있습니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/GradeInfoWebRequest.kt (1)

38-60: GED 점수 검증이 적절합니다.

BigDecimal 타입과 0.0~100.0 범위 검증, 기본값 설정이 올바르게 구현되었습니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/ApplicantInfoWebRequest.kt (1)

10-12: 검증 제약이 적절하게 구현되었습니다.

이름 필드의 최대 길이 제한(10자), 필수 필드 검증(@notblank, @NotNull)이 올바르게 적용되었습니다.

Also applies to: 17-18, 23-25, 30-31

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/ApplicationInfo.kt (1)

7-16: 도메인 DTO 구조가 적절합니다.

YearMonth 타입의 graduationDate 사용은 년-월 정밀도에 적합하며, 검증 로직을 웹 계층에 위임한 깔끔한 설계입니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/dto/request/GradeInfo.kt (1)

5-19: LGTM! 성적 정보 DTO 구조가 적절합니다.

졸업생/졸업예정자용 문자열 성적과 검정고시용 BigDecimal 성적을 분리한 설계가 합리적입니다. 검정고시 성적에 BigDecimal.ZERO 기본값을 설정한 것도 적절합니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/score/service/ScoreService.kt (2)

21-29: LGTM! 점수 생성 로직이 적절합니다.

중복 점수 생성을 방지하는 존재 여부 체크와 예외 처리가 올바르게 구현되었습니다.


31-50: 트랜잭션은 UseCase 레이어에서 이미 관리됨

updateScore 메서드의 호출은 @UseCase 어노테이션이 적용된 SubmitApplicationUseCase에서 이루어지며, 해당 어노테이션에 @Transactional이 메타 어노테이션으로 포함되어 있으므로 트랜잭션 경계가 올바르게 설정됩니다. 여러 포트를 통한 조회와 저장이 동일한 트랜잭션 내에서 수행되므로 데이터 정합성 문제는 발생하지 않습니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/SubmitApplicationUseCase.kt (1)

33-41: 이전 리뷰 이슈가 해결되었습니다.

하드코딩된 테스트 데이터 문제가 수정되어 securityPort.getCurrentUserId()applicationQueryUserPort.queryUserByUserId(userId)를 사용하여 인증된 사용자를 올바르게 조회합니다.

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/application/domain/applicationCase/service/ApplicationCaseService.kt (2)

37-49: LGTM! ApplicationCase 초기화 로직이 적절합니다.

존재 여부 확인 후 없는 경우에만 생성하는 멱등성 있는 패턴이 잘 구현되었습니다.


51-80: LGTM! 졸업자 케이스 업데이트 로직이 적절합니다.

타입 검증 후 copy()를 사용한 불변 객체 업데이트 패턴이 올바르게 구현되었습니다.

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/dto/request/ApplicationInfoWebRequest.kt (1)

6-8: javax.validation 패키지 사용은 적절합니다

프로젝트는 Spring Boot 2.7.1을 사용 중이며, 이 버전에서는 javax.validation.constraints가 올바른 선택입니다. jakarta.validation으로의 마이그레이션은 Spring Boot 3.x 이상으로 업그레이드할 때 필요하므로, 현재 상태에서는 변경이 불필요합니다.

Likely an incorrect or invalid review comment.

@coehgns coehgns merged commit 5e0ac73 into refactor/#69-refactor-casper-application Jan 2, 2026
1 check passed
@coehgns coehgns deleted the refactor/74-equus-application-domain branch January 2, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants