From 0a115b7fbc0fcbdccc4f1bdcdbaec8e07a4d9867 Mon Sep 17 00:00:00 2001 From: halfk Date: Sun, 23 Aug 2026 16:33:50 +0900 Subject: [PATCH] =?UTF-8?q?fix(contract)=20:=20=EA=B3=84=EC=95=BD=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=EC=83=81=ED=83=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=9D=B4=EB=A0=A5=20=EC=95=88=EB=B3=B4=EC=9D=B4?= =?UTF-8?q?=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/ContractStatusEventMapper.java | 9 +++++++++ .../fgc/contract/service/ContractService.java | 17 ++++++++++++++++- .../contract/ContractStatusEventMapper.xml | 11 +++++++++++ .../contract/service/ContractServiceTest.java | 12 ++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) 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') + +