diff --git a/src/main/java/com/susukkang/fgc/contract/mapper/ContractStatusEventMapper.java b/src/main/java/com/susukkang/fgc/contract/mapper/ContractStatusEventMapper.java index 646a23f2..dd6766f7 100644 --- a/src/main/java/com/susukkang/fgc/contract/mapper/ContractStatusEventMapper.java +++ b/src/main/java/com/susukkang/fgc/contract/mapper/ContractStatusEventMapper.java @@ -2,10 +2,12 @@ import com.susukkang.fgc.contract.dto.ContractStatusEventProcessingRow; import com.susukkang.fgc.contract.dto.ContractStatusEventRow; +import com.susukkang.fgc.contract.code.ContractStatus; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.time.OffsetDateTime; /** * 설명 : 계약 상태 사건 Mapper @@ -17,6 +19,13 @@ @Mapper public interface ContractStatusEventMapper { + int insertInitialEvent( + @Param("contractId") Long contractId, + @Param("newStatus") ContractStatus newStatus, + @Param("effectiveAt") OffsetDateTime effectiveAt, + @Param("receivedAt") OffsetDateTime receivedAt + ); + List selectByContractId(@Param("contractId") Long contractId); List selectProcessingsByContractId( diff --git a/src/main/java/com/susukkang/fgc/contract/service/ContractService.java b/src/main/java/com/susukkang/fgc/contract/service/ContractService.java index 3132d52c..16217f01 100644 --- a/src/main/java/com/susukkang/fgc/contract/service/ContractService.java +++ b/src/main/java/com/susukkang/fgc/contract/service/ContractService.java @@ -25,6 +25,7 @@ import java.math.BigDecimal; import java.time.LocalDate; +import java.time.OffsetDateTime; import java.util.List; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -201,7 +202,21 @@ public ContractCreateResponse createContract(ContractCreateRequest request) { calculateCapCheckOrRegisterReview(contractId, paymentStage, command); } - // TODO(FUN-026, 2차): 계약 생성 상태 사건 이력을 등록한다. + // 계약 상세의 상태 변경 이력에서 생성 당시의 최초 상태도 확인할 수 있도록 + // 계약일을 효력일로 하는 event_seq=1 사건을 같은 트랜잭션에 남긴다. + OffsetDateTime receivedAt = DateUtil.nowSeoul(); + OffsetDateTime effectiveAt = request.getContractDate() + .atStartOfDay(DateUtil.SEOUL_ZONE) + .toOffsetDateTime(); + int insertedStatusEvents = contractStatusEventMapper.insertInitialEvent( + contractId, + request.getContractStatus(), + effectiveAt, + receivedAt + ); + if (insertedStatusEvents != 1) { + throw new FgcBusinessException(FgcErrorCode.COMMON_500); + } auditLogService.record(AuditLogService.AuditEvent.builder() .actionCode(AUDIT_CONTRACT_CREATED) diff --git a/src/main/resources/mapper/contract/ContractStatusEventMapper.xml b/src/main/resources/mapper/contract/ContractStatusEventMapper.xml index 99f88fde..4eee9816 100644 --- a/src/main/resources/mapper/contract/ContractStatusEventMapper.xml +++ b/src/main/resources/mapper/contract/ContractStatusEventMapper.xml @@ -5,6 +5,17 @@ + + INSERT INTO fgc.contract_status_event + (contract_id, event_seq, previous_status, new_status, + effective_at, received_at, reason_code, + source_system, source_event_key, data_origin) + VALUES + (#{contractId}, 1, NULL, #{newStatus}, + #{effectiveAt}, #{receivedAt}, 'NEW_CONTRACT', + 'FGC_MANUAL', CONCAT('CONTRACT_CREATED:', #{contractId}), 'MANUAL') + +