Skip to content

Commit cabe75d

Browse files
committed
feat ( #33 ) : kdoc 추가
1 parent 2f0a258 commit cabe75d

38 files changed

Lines changed: 882 additions & 47 deletions

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/status/aggregates/Status.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@ package hs.kr.entrydsm.domain.status.aggregates
33
import hs.kr.entrydsm.domain.status.values.ApplicationStatus
44
import hs.kr.entrydsm.global.annotation.aggregates.Aggregate
55

6+
/**
7+
* 원서 상태 정보를 나타내는 도메인 애그리게이트입니다.
8+
*
9+
* 지원자의 전형 상태, 시험 코드, 합격 여부 등 원서 처리 과정에서
10+
* 필요한 상태 정보를 관리합니다.
11+
*
12+
* @property id 상태 정보의 고유 식별자 (nullable, 기본값 0)
13+
* @property examCode 시험 코드 (nullable, 시험 코드가 배정되지 않은 경우 null)
14+
* @property applicationStatus 현재 원서의 전형 상태
15+
* @property isFirstRoundPass 1차 전형 합격 여부 (기본값 false)
16+
* @property isSecondRoundPass 2차 전형 합격 여부 (기본값 false)
17+
* @property receiptCode 해당 상태와 연결된 접수번호
18+
*/
619
@Aggregate(context = "status")
720
data class Status(
821
val id: Long? = 0,
@@ -11,4 +24,4 @@ data class Status(
1124
val isFirstRoundPass: Boolean = false,
1225
val isSecondRoundPass: Boolean = false,
1326
val receiptCode: Long,
14-
)
27+
)

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/status/aggregates/StatusCache.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,24 @@ package hs.kr.entrydsm.domain.status.aggregates
22

33
import hs.kr.entrydsm.domain.status.values.ApplicationStatus
44

5+
/**
6+
* 원서 상태 정보의 캐시를 나타내는 도메인 모델입니다.
7+
*
8+
* 자주 조회되는 상태 정보를 Redis 등의 캐시 스토리지에 저장하여
9+
* 조회 성능을 향상시키기 위해 사용됩니다.
10+
*
11+
* @property receiptCode 접수번호
12+
* @property examCode 시험 코드 (nullable)
13+
* @property applicationStatus 현재 원서의 전형 상태
14+
* @property isFirstRoundPass 1차 전형 합격 여부
15+
* @property isSecondRoundPass 2차 전형 합격 여부
16+
* @property ttl 캐시 만료 시간 (Time To Live, 초 단위)
17+
*/
518
data class StatusCache(
619
val receiptCode: Long,
720
val examCode: String?,
821
val applicationStatus: ApplicationStatus,
922
val isFirstRoundPass: Boolean,
1023
val isSecondRoundPass: Boolean,
1124
val ttl: Long
12-
)
25+
)
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
package hs.kr.entrydsm.domain.status.interfaces
22

3+
/**
4+
* 원서 상태 변경을 위한 계약 인터페이스입니다.
5+
*
6+
* 접수번호를 기반으로 원서 상태 정보를 업데이트하는 기능을 정의합니다.
7+
*/
38
interface ApplicationCommandStatusContract {
9+
10+
/**
11+
* 지정된 접수번호의 시험 코드를 업데이트합니다.
12+
*
13+
* 시험 코드 배정 시 외부 Status 서비스에 해당 접수번호의
14+
* 시험 코드 정보를 업데이트 요청합니다.
15+
*
16+
* @param receiptCode 시험 코드를 업데이트할 접수번호
17+
* @param examCode 새로 배정된 시험 코드
18+
*/
419
fun updateExamCode(receiptCode: Long, examCode: String)
5-
}
20+
}

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/status/interfaces/ApplicationQueryStatusContract.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,32 @@ package hs.kr.entrydsm.domain.status.interfaces
33
import hs.kr.entrydsm.domain.status.aggregates.Status
44
import hs.kr.entrydsm.domain.status.aggregates.StatusCache
55

6+
/**
7+
* 원서 상태 조회를 위한 계약 인터페이스입니다.
8+
*
9+
* 접수번호를 기반으로 원서 상태 정보를 조회하는 기능을 정의하며,
10+
* 일반 조회와 캐시 기반 조회를 모두 지원합니다.
11+
*/
612
interface ApplicationQueryStatusContract {
13+
14+
/**
15+
* 접수번호로 원서 상태를 조회합니다.
16+
*
17+
* 외부 Status 서비스에서 해당 접수번호의 상태 정보를 조회합니다.
18+
*
19+
* @param receiptCode 조회할 접수번호
20+
* @return 조회된 상태 정보, 존재하지 않는 경우 null
21+
*/
722
fun queryStatusByReceiptCode(receiptCode: Long): Status?
23+
24+
/**
25+
* 캐시에서 접수번호로 원서 상태를 조회합니다.
26+
*
27+
* Redis 등의 캐시 스토리지에서 해당 접수번호의 상태 정보를 조회하여
28+
* 빠른 응답을 제공합니다.
29+
*
30+
* @param receiptCode 조회할 접수번호
31+
* @return 캐시된 상태 정보, 존재하지 않는 경우 null
32+
*/
833
fun queryStatusByReceiptCodeInCache(receiptCode: Long): StatusCache?
9-
}
34+
}
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
package hs.kr.entrydsm.domain.status.interfaces
22

3+
/**
4+
* 시험 코드 저장을 위한 계약 인터페이스입니다.
5+
*
6+
* 비동기적으로 시험 코드를 외부 서비스에 저장하는 기능을 정의합니다.
7+
*/
38
interface SaveExamCodeContract {
9+
10+
/**
11+
* 지정된 접수번호의 시험 코드를 비동기적으로 업데이트합니다.
12+
*
13+
* Coroutine을 사용하여 비블로킹 방식으로 외부 서비스에
14+
* 시험 코드 업데이트를 요청합니다.
15+
*
16+
* @param receiptCode 시험 코드를 업데이트할 접수번호
17+
* @param examCode 새로 배정된 시험 코드
18+
*/
419
suspend fun updateExamCode(receiptCode: Long, examCode: String)
5-
}
20+
}
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
package hs.kr.entrydsm.domain.status.interfaces
22

3-
interface StatusContract : ApplicationQueryStatusContract, ApplicationCommandStatusContract
3+
/**
4+
* 상태 관련 모든 계약을 통합하는 메인 계약 인터페이스입니다.
5+
*
6+
* 상태 조회(Query)와 상태 변경(Command) 계약을 모두 상속받아
7+
* 상태 관련 모든 기능에 대한 단일 진입점을 제공합니다.
8+
*/
9+
interface StatusContract : ApplicationQueryStatusContract, ApplicationCommandStatusContract

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/user/aggregates/User.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,32 @@ package hs.kr.entrydsm.domain.user.aggregates
33
import hs.kr.entrydsm.global.annotation.aggregates.Aggregate
44
import java.util.UUID
55

6+
/**
7+
* 사용자 정보를 나타내는 도메인 애그리게이트입니다.
8+
*
9+
* 사용자의 기본 정보와 부모 여부를 관리하며,
10+
* 다른 마이크로서비스로부터 받아온 사용자 데이터를 도메인 내에서 활용하기 위한 모델입니다.
11+
*/
612
@Aggregate(context = "user")
713
data class User(
14+
/**
15+
* 사용자의 고유 식별자
16+
*/
817
val id: UUID,
18+
19+
/**
20+
* 사용자의 전화번호
21+
*/
922
val phoneNumber: String,
23+
24+
/**
25+
* 사용자의 이름
26+
*/
1027
val name: String,
28+
29+
/**
30+
* 부모 여부를 나타내는 플래그
31+
* true인 경우 부모, false인 경우 학생
32+
*/
1133
val isParent: Boolean
1234
)

casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/user/interfaces/ApplicationQueryUserContract.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@ package hs.kr.entrydsm.domain.user.interfaces
33
import hs.kr.entrydsm.domain.user.aggregates.User
44
import java.util.UUID
55

6+
/**
7+
* 원서 조회 시 필요한 사용자 정보 조회를 위한 계약 인터페이스입니다.
8+
*
9+
* 원서와 연관된 사용자 정보를 외부 서비스로부터 조회하는 기능을 정의합니다.
10+
*/
611
interface ApplicationQueryUserContract {
12+
/**
13+
* 사용자 ID로 사용자 정보를 조회합니다.
14+
*
15+
* @param userId 조회할 사용자의 고유 식별자
16+
* @return 조회된 사용자 정보
17+
*/
718
fun queryUserByUserId(userId: UUID): User
8-
}
19+
}
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
package hs.kr.entrydsm.domain.user.interfaces
22

3+
/**
4+
* 사용자 관련 외부 통신을 위한 계약 인터페이스입니다.
5+
*
6+
* 현재는 ApplicationQueryUserContract를 상속받아
7+
* 원서 조회 시 필요한 사용자 정보 조회 기능을 제공합니다.
8+
*/
39
interface UserContract : ApplicationQueryUserContract {
4-
}
10+
}

casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/consumer/DeleteApplicationConsumer.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,30 @@ import org.slf4j.LoggerFactory
77
import org.springframework.stereotype.Component
88
import org.springframework.kafka.annotation.KafkaListener
99

10+
/**
11+
* 사용자 삭제 이벤트를 수신하여 연관된 원서를 삭제하는 Consumer 클래스입니다.
12+
*
13+
* 사용자 서비스에서 사용자가 삭제되었을 때 해당 사용자의 원서도 함께 삭제하여
14+
* 데이터 일관성을 유지하는 역할을 담당합니다.
15+
*
16+
* @property mapper JSON 역직렬화를 위한 ObjectMapper
17+
* @property applicationConsumeContract 원서 삭제 로직을 처리하는 계약 인터페이스
18+
*/
1019
@Component
1120
class DeleteApplicationConsumer(
1221
private val mapper: ObjectMapper,
1322
private val applicationConsumeContract: ApplicationConsumeEventContract
1423
) {
1524
private val logger = LoggerFactory.getLogger(DeleteApplicationConsumer::class.java)
1625

26+
/**
27+
* 사용자 삭제 이벤트를 수신하여 연관된 원서를 삭제합니다.
28+
*
29+
* DELETE_USER 토픽에서 접수번호를 수신하고, 해당 접수번호에 해당하는
30+
* 원서를 삭제합니다. 처리 과정에서 발생하는 오류는 로그로 기록됩니다.
31+
*
32+
* @param message 사용자 삭제 이벤트 메시지 (접수번호가 JSON 형태로 포함)
33+
*/
1734
@KafkaListener(
1835
topics = [KafkaTopics.DELETE_USER],
1936
groupId = "delete-application-consumer",
@@ -29,4 +46,4 @@ class DeleteApplicationConsumer(
2946
logger.error("원서 삭제 처리 실패: $message", e)
3047
}
3148
}
32-
}
49+
}

0 commit comments

Comments
 (0)