diff --git a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationCreateEventContract.kt b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationCreateEventContract.kt index 55577bfe..183aaa24 100644 --- a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationCreateEventContract.kt +++ b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationCreateEventContract.kt @@ -4,4 +4,5 @@ import java.util.UUID interface ApplicationCreateEventContract { fun publishCreateApplication(receiptCode: Long, userId: UUID) + fun submitApplicationFinal(receiptCode: Long) } \ No newline at end of file diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/producer/ApplicationEventProducer.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/producer/ApplicationEventProducer.kt index 40ecd8f9..11f5c23e 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/producer/ApplicationEventProducer.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/event/producer/ApplicationEventProducer.kt @@ -20,8 +20,9 @@ import java.util.UUID @Component class ApplicationEventProducer( private val mapper: ObjectMapper, - private val createApplicationTemplate: KafkaTemplate -): ApplicationCreateEventContract { + private val createApplicationTemplate: KafkaTemplate, + private val submitApplicationFinalTemplate: KafkaTemplate, +) : ApplicationCreateEventContract { /** * 원서 생성 이벤트를 발행합니다. @@ -39,4 +40,19 @@ class ApplicationEventProducer( mapper.writeValueAsString(createApplicationEvent) ) } + + /** + * 최종 제출 이벤트를 발행합니다. + * + * 원서가 성공적으로 최종 제출된 후 성적 서비스에서 해당 원서의 성적을 + * 계산하도록 이벤트를 발행합니다. + * + * @param receiptCode 최종 제출한 원서의 접수번호 + */ + override fun submitApplicationFinal(receiptCode: Long) { + submitApplicationFinalTemplate.send( + KafkaTopics.SUBMIT_APPLICATION_FINAL, + receiptCode + ) + } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaProducerConfig.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaProducerConfig.kt index f365723c..db065097 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaProducerConfig.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaProducerConfig.kt @@ -41,6 +41,26 @@ class KafkaProducerConfig( return DefaultKafkaProducerFactory(producerConfig()) } + /** + * 최종 제출 이벤트 발행을 위한 KafkaTemplate을 생성합니다. + * + * @return 설정된 KafkaTemplate 인스턴스 + */ + @Bean + fun submitApplicationFinalTemplate(): KafkaTemplate { + return KafkaTemplate(submitApplicationFinalProducerFactory()) + } + + /** + * 최종 제출 이벤트용 Producer Factory를 생성합니다. + * + * @return 설정된 DefaultKafkaProducerFactory 인스턴스 + */ + @Bean + fun submitApplicationFinalProducerFactory(): DefaultKafkaProducerFactory { + return DefaultKafkaProducerFactory(producerConfig()) + } + /** * Kafka Producer의 기본 설정을 구성합니다. * diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaTopics.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaTopics.kt index 44fc1a2b..a954e5fc 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaTopics.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/kafka/configuration/KafkaTopics.kt @@ -31,4 +31,10 @@ object KafkaTopics { * 이 이벤트 수신 시 보상 트랜잭션으로 원서를 삭제함 */ const val USER_RECEIPT_CODE_UPDATE_FAILED = "user-receipt-code-update-failed" + + /** + * 최종 제출 이벤트 토픽 + * 최종 제출 시 성적 서비스에 성적 계산을 요청하기 위해 사용 + */ + const val SUBMIT_APPLICATION_FINAL = "submit-application-final" }