feat(core): AgentOrgHistoryResp + MapStruct mapper 3종 추가 (리뷰 5a)
코드 품질 5단계 ga-core 준비물. ga-api 적용은 5b에서 진행. AgentOrgHistoryResp 추가: - AgentOrgHistoryVO 직접 노출 문제 해소 (감사 필드 누설 + FK ID만 노출) - 표시용 조인 필드 포함: agentName, from/toOrgName, from/toGradeName, changeTypeName (CHANGE_TYPE 코드그룹 스칼라 서브쿼리) - AgentMapper.selectHistoryResp + AgentMapper.xml 조인 쿼리 추가 MapStruct mapper 3종 (com.ga.core.mapstruct): - ContractMapStruct (ContractSaveReq → ContractVO + update 패턴) - ExceptionLedgerMapStruct (ExceptionLedgerSaveReq → ExceptionLedgerVO) - UserMapStruct (UserSaveReq → UserVO) - @Mapper(componentModel="spring"), 감사 필드 ignore
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.ga.core.mapper.org;
|
package com.ga.core.mapper.org;
|
||||||
|
|
||||||
import com.ga.core.vo.org.AgentExcelVO;
|
import com.ga.core.vo.org.AgentExcelVO;
|
||||||
|
import com.ga.core.vo.org.AgentOrgHistoryResp;
|
||||||
import com.ga.core.vo.org.AgentOrgHistoryVO;
|
import com.ga.core.vo.org.AgentOrgHistoryVO;
|
||||||
import com.ga.core.vo.org.AgentResp;
|
import com.ga.core.vo.org.AgentResp;
|
||||||
import com.ga.core.vo.org.AgentSearchParam;
|
import com.ga.core.vo.org.AgentSearchParam;
|
||||||
@@ -28,5 +29,6 @@ public interface AgentMapper {
|
|||||||
|
|
||||||
/** 이력 */
|
/** 이력 */
|
||||||
List<AgentOrgHistoryVO> selectHistory(@Param("agentId") Long agentId);
|
List<AgentOrgHistoryVO> selectHistory(@Param("agentId") Long agentId);
|
||||||
|
List<AgentOrgHistoryResp> selectHistoryResp(@Param("agentId") Long agentId);
|
||||||
int insertHistory(AgentOrgHistoryVO vo);
|
int insertHistory(AgentOrgHistoryVO vo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.ga.core.mapstruct;
|
||||||
|
|
||||||
|
import com.ga.core.vo.product.ContractSaveReq;
|
||||||
|
import com.ga.core.vo.product.ContractVO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface ContractMapStruct {
|
||||||
|
|
||||||
|
@Mapping(target = "contractId", ignore = true)
|
||||||
|
@Mapping(target = "status", ignore = true)
|
||||||
|
@Mapping(target = "lapseDate", ignore = true)
|
||||||
|
@Mapping(target = "revivalDate", ignore = true)
|
||||||
|
@Mapping(target = "createdAt", ignore = true)
|
||||||
|
@Mapping(target = "updatedAt", ignore = true)
|
||||||
|
ContractVO toVO(ContractSaveReq req);
|
||||||
|
|
||||||
|
@Mapping(target = "contractId", ignore = true)
|
||||||
|
@Mapping(target = "status", ignore = true)
|
||||||
|
@Mapping(target = "lapseDate", ignore = true)
|
||||||
|
@Mapping(target = "revivalDate", ignore = true)
|
||||||
|
@Mapping(target = "createdAt", ignore = true)
|
||||||
|
@Mapping(target = "updatedAt", ignore = true)
|
||||||
|
void updateVO(ContractSaveReq req, @MappingTarget ContractVO vo);
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.ga.core.mapstruct;
|
||||||
|
|
||||||
|
import com.ga.core.vo.ledger.ExceptionLedgerSaveReq;
|
||||||
|
import com.ga.core.vo.ledger.ExceptionLedgerVO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface ExceptionLedgerMapStruct {
|
||||||
|
|
||||||
|
@Mapping(target = "ledgerId", ignore = true)
|
||||||
|
@Mapping(target = "contractId", ignore = true)
|
||||||
|
@Mapping(target = "commissionYear", ignore = true)
|
||||||
|
@Mapping(target = "taxAmount", ignore = true)
|
||||||
|
@Mapping(target = "approveStatus", ignore = true)
|
||||||
|
@Mapping(target = "approverId", ignore = true)
|
||||||
|
@Mapping(target = "approveDate", ignore = true)
|
||||||
|
@Mapping(target = "recurringLeft", ignore = true)
|
||||||
|
@Mapping(target = "status", ignore = true)
|
||||||
|
@Mapping(target = "version", ignore = true)
|
||||||
|
@Mapping(target = "createdAt", ignore = true)
|
||||||
|
@Mapping(target = "updatedAt", ignore = true)
|
||||||
|
ExceptionLedgerVO toVO(ExceptionLedgerSaveReq req);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.ga.core.mapstruct;
|
||||||
|
|
||||||
|
import com.ga.core.vo.user.UserSaveReq;
|
||||||
|
import com.ga.core.vo.user.UserVO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface UserMapStruct {
|
||||||
|
|
||||||
|
@Mapping(target = "userId", ignore = true)
|
||||||
|
@Mapping(target = "password", ignore = true)
|
||||||
|
@Mapping(target = "failCount", ignore = true)
|
||||||
|
@Mapping(target = "lastLoginAt", ignore = true)
|
||||||
|
@Mapping(target = "pwdChangedAt", ignore = true)
|
||||||
|
@Mapping(target = "createdAt", ignore = true)
|
||||||
|
@Mapping(target = "createdBy", ignore = true)
|
||||||
|
@Mapping(target = "updatedAt", ignore = true)
|
||||||
|
@Mapping(target = "updatedBy", ignore = true)
|
||||||
|
UserVO toVO(UserSaveReq req);
|
||||||
|
|
||||||
|
@Mapping(target = "userId", ignore = true)
|
||||||
|
@Mapping(target = "loginId", ignore = true)
|
||||||
|
@Mapping(target = "password", ignore = true)
|
||||||
|
@Mapping(target = "failCount", ignore = true)
|
||||||
|
@Mapping(target = "lastLoginAt", ignore = true)
|
||||||
|
@Mapping(target = "pwdChangedAt", ignore = true)
|
||||||
|
@Mapping(target = "createdAt", ignore = true)
|
||||||
|
@Mapping(target = "createdBy", ignore = true)
|
||||||
|
@Mapping(target = "updatedAt", ignore = true)
|
||||||
|
@Mapping(target = "updatedBy", ignore = true)
|
||||||
|
void updateVO(UserSaveReq req, @MappingTarget UserVO vo);
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.ga.core.vo.org;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AgentOrgHistoryResp {
|
||||||
|
private Long historyId;
|
||||||
|
private Long agentId;
|
||||||
|
private String agentName;
|
||||||
|
|
||||||
|
private Long fromOrgId;
|
||||||
|
private String fromOrgName;
|
||||||
|
private Long toOrgId;
|
||||||
|
private String toOrgName;
|
||||||
|
|
||||||
|
private Long fromGradeId;
|
||||||
|
private String fromGradeName;
|
||||||
|
private Long toGradeId;
|
||||||
|
private String toGradeName;
|
||||||
|
|
||||||
|
private String changeType; // TRANSFER / PROMOTE / DEMOTE / JOIN / LEAVE
|
||||||
|
private String changeTypeName;
|
||||||
|
private LocalDate changeDate;
|
||||||
|
private String changeReason;
|
||||||
|
}
|
||||||
@@ -143,10 +143,57 @@
|
|||||||
WHERE agent_id = #{agentId}
|
WHERE agent_id = #{agentId}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<resultMap id="AgentOrgHistoryRespMap" type="com.ga.core.vo.org.AgentOrgHistoryResp">
|
||||||
|
<id property="historyId" column="history_id"/>
|
||||||
|
<result property="agentId" column="agent_id"/>
|
||||||
|
<result property="agentName" column="agent_name"/>
|
||||||
|
<result property="fromOrgId" column="from_org_id"/>
|
||||||
|
<result property="fromOrgName" column="from_org_name"/>
|
||||||
|
<result property="toOrgId" column="to_org_id"/>
|
||||||
|
<result property="toOrgName" column="to_org_name"/>
|
||||||
|
<result property="fromGradeId" column="from_grade_id"/>
|
||||||
|
<result property="fromGradeName" column="from_grade_name"/>
|
||||||
|
<result property="toGradeId" column="to_grade_id"/>
|
||||||
|
<result property="toGradeName" column="to_grade_name"/>
|
||||||
|
<result property="changeType" column="change_type"/>
|
||||||
|
<result property="changeTypeName" column="change_type_name"/>
|
||||||
|
<result property="changeDate" column="change_date"/>
|
||||||
|
<result property="changeReason" column="change_reason"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<select id="selectHistory" resultMap="AgentHistoryMap">
|
<select id="selectHistory" resultMap="AgentHistoryMap">
|
||||||
SELECT * FROM agent_org_history WHERE agent_id = #{agentId} ORDER BY change_date DESC, history_id DESC
|
SELECT * FROM agent_org_history WHERE agent_id = #{agentId} ORDER BY change_date DESC, history_id DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 이력 조회 — 조인으로 이름 필드 포함 (AgentOrgHistoryResp 매핑) -->
|
||||||
|
<select id="selectHistoryResp" resultMap="AgentOrgHistoryRespMap">
|
||||||
|
SELECT
|
||||||
|
h.history_id,
|
||||||
|
h.agent_id,
|
||||||
|
a.agent_name,
|
||||||
|
h.from_org_id,
|
||||||
|
fo.org_name AS from_org_name,
|
||||||
|
h.to_org_id,
|
||||||
|
to_.org_name AS to_org_name,
|
||||||
|
h.from_grade_id,
|
||||||
|
fg.grade_name AS from_grade_name,
|
||||||
|
h.to_grade_id,
|
||||||
|
tg.grade_name AS to_grade_name,
|
||||||
|
h.change_type,
|
||||||
|
(SELECT cc.code_name FROM common_code cc
|
||||||
|
WHERE cc.group_code = 'CHANGE_TYPE' AND cc.code = h.change_type) AS change_type_name,
|
||||||
|
h.change_date,
|
||||||
|
h.change_reason
|
||||||
|
FROM agent_org_history h
|
||||||
|
LEFT JOIN agent a ON a.agent_id = h.agent_id
|
||||||
|
LEFT JOIN organization fo ON fo.org_id = h.from_org_id
|
||||||
|
LEFT JOIN organization to_ ON to_.org_id = h.to_org_id
|
||||||
|
LEFT JOIN grade fg ON fg.grade_id = h.from_grade_id
|
||||||
|
LEFT JOIN grade tg ON tg.grade_id = h.to_grade_id
|
||||||
|
WHERE h.agent_id = #{agentId}
|
||||||
|
ORDER BY h.change_date DESC, h.history_id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
<insert id="insertHistory" parameterType="com.ga.core.vo.org.AgentOrgHistoryVO" useGeneratedKeys="true" keyProperty="historyId">
|
<insert id="insertHistory" parameterType="com.ga.core.vo.org.AgentOrgHistoryVO" useGeneratedKeys="true" keyProperty="historyId">
|
||||||
INSERT INTO agent_org_history (agent_id, from_org_id, to_org_id, from_grade_id, to_grade_id,
|
INSERT INTO agent_org_history (agent_id, from_org_id, to_org_id, from_grade_id, to_grade_id,
|
||||||
change_type, change_date, change_reason, created_at, created_by)
|
change_type, change_date, change_reason, created_at, created_by)
|
||||||
|
|||||||
Reference in New Issue
Block a user