diff --git a/src/main/java/com/eactive/apim/portal/portaluser/entity/UserRoleHistory.java b/src/main/java/com/eactive/apim/portal/portaluser/entity/UserRoleHistory.java new file mode 100644 index 0000000..0b6fbb1 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/portaluser/entity/UserRoleHistory.java @@ -0,0 +1,76 @@ +package com.eactive.apim.portal.portaluser.entity; + +import com.eactive.eai.data.converter.LocalDateTimeToStringConverter14; +import lombok.Data; +import org.hibernate.annotations.Comment; +import org.hibernate.annotations.Parameter; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 사용자 역할(권한) 변경 감사 이력. + * + *

법인 관리자 위임/회수, 소속 제외 등으로 {@code PortalUser.roleCode} 가 변경될 때 + * 이전 역할 → 새 역할, 변경 유형, 변경 수행자(관리자)를 이력으로 남긴다. + * {@link UserPasswordHistory} 와 동일한 저장 패턴(시퀀스 PK, 14자리 문자열 일시)을 따른다.

+ */ +@Data +@Entity +@Table(name = "ptl_user_role_history") +public class UserRoleHistory implements Serializable, com.eactive.eai.data.Data { + private static final long serialVersionUID = 1L; + + @Id + @GenericGenerator( + name = "ptl_user_role_history_seq_gen", + strategy = "com.eactive.eai.rms.data.jpa.SchemaPrefixedSequenceGenerator", + parameters = { + @Parameter(name = "sequence_name", value = "PTL_USER_ROLE_HISTORY_SEQ"), + @Parameter(name = "initial_value", value = "1"), + @Parameter(name = "increment_size", value = "1") + } + ) + @GeneratedValue( + strategy = GenerationType.SEQUENCE, + generator = "ptl_user_role_history_seq_gen" + ) + @Column(name = "id", columnDefinition = "number(19)") + private Long id; + + @Column(name = "user_id", length = 255, nullable = false) + @Comment("대상 사용자 ID(loginId)") + private String userId; + + @Column(name = "before_role", length = 30) + @Comment("변경 전 역할") + private String beforeRole; + + @Column(name = "after_role", length = 30, nullable = false) + @Comment("변경 후 역할") + private String afterRole; + + @Column(name = "change_type", length = 30, nullable = false) + @Comment("변경 유형(MANAGER_ASSIGN/MANAGER_REVOKE/ORG_REMOVE 등)") + private String changeType; + + @Column(name = "changed_by", length = 255, nullable = false) + @Comment("변경 수행자(loginId)") + private String changedBy; + + @Column(name = "change_date", length = 14, nullable = false) + @Comment("변경 일시") + @Convert(converter = LocalDateTimeToStringConverter14.class) + private LocalDateTime changeDate; + + @Column(name = "created_by", length = 255, nullable = false) + @Comment("생성자") + private String createdBy; + + @Column(name = "created_date", length = 14, nullable = false) + @Comment("생성일시") + @Convert(converter = LocalDateTimeToStringConverter14.class) + private LocalDateTime createdDate; +} diff --git a/src/main/java/com/eactive/apim/portal/portaluser/repository/UserRoleHistoryRepository.java b/src/main/java/com/eactive/apim/portal/portaluser/repository/UserRoleHistoryRepository.java new file mode 100644 index 0000000..28f402d --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/portaluser/repository/UserRoleHistoryRepository.java @@ -0,0 +1,13 @@ +package com.eactive.apim.portal.portaluser.repository; + +import com.eactive.apim.portal.portaluser.entity.UserRoleHistory; +import com.eactive.eai.rms.data.EMSDataSource; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +@EMSDataSource +public interface UserRoleHistoryRepository extends JpaRepository { + + List findByUserIdOrderByChangeDateDesc(String userId); +}