diff --git a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt index efc3e2e3..e7f366e0 100644 --- a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt +++ b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt @@ -9,4 +9,6 @@ interface ApplicationContract : QueryAllFirstRoundPassedApplicationContract { fun getApplicationByReceiptCode(receiptCode: Long): Application? fun updateApplicationStatus(receiptCode: Long, status: hs.kr.entrydsm.domain.status.values.ApplicationStatus) + + fun delete(application: Application) } \ No newline at end of file diff --git a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationDeleteEventContract.kt b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationDeleteEventContract.kt new file mode 100644 index 00000000..45bbfcd5 --- /dev/null +++ b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationDeleteEventContract.kt @@ -0,0 +1,5 @@ +package hs.kr.entrydsm.domain.application.interfaces + +interface ApplicationDeleteEventContract { + fun deleteStatus(receiptCode: Long) +} \ No newline at end of file diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt index b1e9b33b..cea40ee2 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt @@ -90,4 +90,8 @@ class ApplicationPersistenceAdapter( applicationJpaRepository.save(applicationEntity) } } + + override fun delete(application: Application) { + applicationJpaRepository.delete(applicationMapper.toEntity(application)) + } } 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 0803131f..3bdf5e6e 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 @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import hs.kr.entrydsm.application.domain.application.event.dto.CreateApplicationEvent import hs.kr.entrydsm.application.global.kafka.configuration.KafkaTopics import hs.kr.entrydsm.domain.application.interfaces.ApplicationCreateEventContract +import hs.kr.entrydsm.domain.application.interfaces.ApplicationDeleteEventContract import org.springframework.kafka.core.KafkaTemplate import org.springframework.stereotype.Component import java.util.UUID @@ -24,7 +25,8 @@ class ApplicationEventProducer( private val submitApplicationFinalTemplate: KafkaTemplate, private val createApplicationScoreRollbackTemplate: KafkaTemplate, private val updateEducationalStatusTemplate: KafkaTemplate, -) : ApplicationCreateEventContract { + private val deleteStatusTemplate: KafkaTemplate +) : ApplicationCreateEventContract, ApplicationDeleteEventContract { /** * 원서 생성 이벤트를 발행합니다. * @@ -94,4 +96,11 @@ class ApplicationEventProducer( mapper.writeValueAsString(updateEvent), ) } + + override fun deleteStatus(receiptCode: Long) { + deleteStatusTemplate.send( + KafkaTopics.DELETE_STATUS, + receiptCode + ) + } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt index 45018f48..7f0e3c25 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt @@ -4,6 +4,7 @@ import hs.kr.entrydsm.application.domain.application.exception.ApplicationCannot import hs.kr.entrydsm.application.domain.application.exception.ApplicationNotFoundException import hs.kr.entrydsm.application.global.annotation.usecase.UseCase import hs.kr.entrydsm.domain.application.interfaces.ApplicationContract +import hs.kr.entrydsm.domain.application.interfaces.ApplicationDeleteEventContract import hs.kr.entrydsm.domain.application.interfaces.CancelApplicationContract import hs.kr.entrydsm.domain.status.values.ApplicationStatus import org.springframework.transaction.annotation.Transactional @@ -13,6 +14,7 @@ import java.util.UUID @Transactional class CancelApplicationUseCase( private val applicationContract: ApplicationContract, + private val applicationDeleteEventContract: ApplicationDeleteEventContract ) : CancelApplicationContract { override fun cancelApplication( userId: UUID, @@ -25,6 +27,7 @@ class CancelApplicationUseCase( throw ApplicationCannotCancelException() } - applicationContract.updateApplicationStatus(application.receiptCode, ApplicationStatus.WRITING) + applicationDeleteEventContract.deleteStatus(application.receiptCode) + applicationContract.delete(application) } } 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 9a806f05..14b730de 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 @@ -180,6 +180,16 @@ class KafkaProducerConfig( return DefaultKafkaProducerFactory(producerConfig()) } + @Bean + fun deleteStatusTemplate(): KafkaTemplate { + return KafkaTemplate(deleteStatusProducerFactory()) + } + + @Bean + fun deleteStatusProducerFactory(): 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 f126dab2..0abc09d1 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 @@ -73,4 +73,6 @@ object KafkaTopics { * 상태 생성 실패 시 보상 트랜잭션을 위해 사용 */ const val CREATE_APPLICATION_STATUS_ROLLBACK = "create-application-status-rollback" + + const val DELETE_STATUS = "delete-status" }