Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package hs.kr.entrydsm.domain.application.interfaces

interface ApplicationDeleteEventContract {
fun deleteStatus(receiptCode: Long)
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,8 @@ class ApplicationPersistenceAdapter(
applicationJpaRepository.save(applicationEntity)
}
}

override fun delete(application: Application) {
applicationJpaRepository.delete(applicationMapper.toEntity(application))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -24,7 +25,8 @@ class ApplicationEventProducer(
private val submitApplicationFinalTemplate: KafkaTemplate<String, Any>,
private val createApplicationScoreRollbackTemplate: KafkaTemplate<String, Any>,
private val updateEducationalStatusTemplate: KafkaTemplate<String, Any>,
) : ApplicationCreateEventContract {
private val deleteStatusTemplate: KafkaTemplate<String, Any>
) : ApplicationCreateEventContract, ApplicationDeleteEventContract {
/**
* 원서 생성 이벤트를 발행합니다.
*
Expand Down Expand Up @@ -94,4 +96,11 @@ class ApplicationEventProducer(
mapper.writeValueAsString(updateEvent),
)
}

override fun deleteStatus(receiptCode: Long) {
deleteStatusTemplate.send(
KafkaTopics.DELETE_STATUS,
receiptCode
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -25,6 +27,7 @@ class CancelApplicationUseCase(
throw ApplicationCannotCancelException()
}

applicationContract.updateApplicationStatus(application.receiptCode, ApplicationStatus.WRITING)
applicationDeleteEventContract.deleteStatus(application.receiptCode)
applicationContract.delete(application)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,16 @@ class KafkaProducerConfig(
return DefaultKafkaProducerFactory(producerConfig())
}

@Bean
fun deleteStatusTemplate(): KafkaTemplate<String, Any> {
return KafkaTemplate(deleteStatusProducerFactory())
}

@Bean
fun deleteStatusProducerFactory(): DefaultKafkaProducerFactory<String, Any> {
return DefaultKafkaProducerFactory(producerConfig())
}

/**
* Kafka Producer의 기본 설정을 구성합니다.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,6 @@ object KafkaTopics {
* 상태 생성 실패 시 보상 트랜잭션을 위해 사용
*/
const val CREATE_APPLICATION_STATUS_ROLLBACK = "create-application-status-rollback"

const val DELETE_STATUS = "delete-status"
}
Loading