From 7f73e6fcd0f21975487e2f9bc9587d8730e74fc6 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 16 Jun 2026 09:11:14 +0900 Subject: [PATCH] =?UTF-8?q?djb=5Fapistatus=5Fincident=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0/=EB=A6=AC=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC=20?= =?UTF-8?q?=EC=8B=A0=EC=84=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DjbApistatusIncident / Api / Timeline 3개 엔티티 - IncidentKind / IncidentState enum - EMSADM 스키마 1:1 매핑, Spring Data JPA 리포지토리 Co-Authored-By: Claude Opus 4.7 --- .../incident/entity/DjbApistatusIncident.java | 71 +++++++++++++++++++ .../entity/DjbApistatusIncidentApi.java | 38 ++++++++++ .../entity/DjbApistatusIncidentApiId.java | 18 +++++ .../entity/DjbApistatusIncidentTimeline.java | 51 +++++++++++++ .../incident/entity/IncidentKind.java | 6 ++ .../incident/entity/IncidentState.java | 9 +++ .../DjbApistatusIncidentApiRepository.java | 19 +++++ .../DjbApistatusIncidentRepository.java | 17 +++++ ...jbApistatusIncidentTimelineRepository.java | 18 +++++ 9 files changed, 247 insertions(+) create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncident.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApi.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApiId.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentTimeline.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentState.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentApiRepository.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java create mode 100644 src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentTimelineRepository.java diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncident.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncident.java new file mode 100644 index 0000000..40d95c8 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncident.java @@ -0,0 +1,71 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +import com.eactive.apim.portal.common.entity.Auditable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import java.time.LocalDateTime; + +@Entity +@Table(name = "DJB_APISTATUS_INCIDENT") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class DjbApistatusIncident extends Auditable { + + @Id + @SequenceGenerator(name = "seqDjbApistatusIncident", + sequenceName = "SEQ_DJB_APISTATUS_INCIDENT", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqDjbApistatusIncident") + @Column(name = "INCIDENT_ID", nullable = false) + private Long incidentId; + + @Enumerated(EnumType.STRING) + @Column(name = "KIND", length = 20, nullable = false) + private IncidentKind kind; + + @Enumerated(EnumType.STRING) + @Column(name = "STATE", length = 30) + private IncidentState state; + + @Enumerated(EnumType.STRING) + @Column(name = "PREVIOUS_STATE", length = 30) + private IncidentState previousState; + + @Column(name = "TITLE", length = 500, nullable = false) + private String title; + + @Column(name = "SUMMARY", length = 2000) + private String summary; + + @Column(name = "STARTED_AT") + private LocalDateTime startedAt; + + @Column(name = "END_AT") + private LocalDateTime endAt; + + @Column(name = "DETECTED_BY", length = 30, nullable = false) + private String detectedBy = "MANUAL"; + + @Column(name = "INTERFACE_ID", length = 200) + private String interfaceId; + + @Column(name = "NOTICE_ID", length = 36) + private String noticeId; + + @Column(name = "DRAFT_YN", length = 1, nullable = false) + private String draftYn = "N"; + + @Column(name = "FIX_YN", length = 1, nullable = false) + private String fixYn = "N"; +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApi.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApi.java new file mode 100644 index 0000000..698b292 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApi.java @@ -0,0 +1,38 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +import com.eactive.apim.portal.common.entity.Auditable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; +import java.time.LocalDateTime; + +@Entity +@Table(name = "DJB_APISTATUS_INCIDENT_API") +@IdClass(DjbApistatusIncidentApiId.class) +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true) +public class DjbApistatusIncidentApi extends Auditable { + + @Id + @EqualsAndHashCode.Include + @Column(name = "INCIDENT_ID", nullable = false) + private Long incidentId; + + @Id + @EqualsAndHashCode.Include + @Column(name = "API_ID", length = 30, nullable = false) + private String apiId; + + @Column(name = "API_NAME", length = 200) + private String apiName; + + @Column(name = "RECOVERED_AT") + private LocalDateTime recoveredAt; +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApiId.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApiId.java new file mode 100644 index 0000000..60847c5 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentApiId.java @@ -0,0 +1,18 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DjbApistatusIncidentApiId implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long incidentId; + private String apiId; +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentTimeline.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentTimeline.java new file mode 100644 index 0000000..51acee5 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/DjbApistatusIncidentTimeline.java @@ -0,0 +1,51 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +import com.eactive.apim.portal.common.entity.Auditable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import java.time.LocalDateTime; + +@Entity +@Table(name = "DJB_APISTATUS_INCIDENT_TIMELINE") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class DjbApistatusIncidentTimeline extends Auditable { + + @Id + @SequenceGenerator(name = "seqDjbApistatusIncidentTimeline", + sequenceName = "SEQ_DJB_APISTATUS_INCIDENT_TIMELINE", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqDjbApistatusIncidentTimeline") + @Column(name = "TIMELINE_ID", nullable = false) + private Long timelineId; + + @Column(name = "INCIDENT_ID", nullable = false) + private Long incidentId; + + @Column(name = "EVENT_AT", nullable = false) + private LocalDateTime eventAt; + + @Enumerated(EnumType.STRING) + @Column(name = "STATE_AFTER", length = 30) + private IncidentState stateAfter; + + @Column(name = "BODY", length = 4000, nullable = false) + private String body; + + @Column(name = "AUTHOR_TYPE", length = 20, nullable = false) + private String authorType = "OPERATOR"; + + @Column(name = "VISIBLE_YN", length = 1, nullable = false) + private String visibleYn = "Y"; +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java new file mode 100644 index 0000000..7880108 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java @@ -0,0 +1,6 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +public enum IncidentKind { + INCIDENT, + MAINTENANCE +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentState.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentState.java new file mode 100644 index 0000000..a329c5a --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentState.java @@ -0,0 +1,9 @@ +package com.eactive.apim.portal.djb.apistatus.incident.entity; + +public enum IncidentState { + INVESTIGATING, + IDENTIFIED, + MONITORING, + RESOLVED, + CANCELED +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentApiRepository.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentApiRepository.java new file mode 100644 index 0000000..ef65543 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentApiRepository.java @@ -0,0 +1,19 @@ +package com.eactive.apim.portal.djb.apistatus.incident.repository; + +import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncidentApi; +import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncidentApiId; +import com.eactive.eai.rms.data.EMSDataSource; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@EMSDataSource +public interface DjbApistatusIncidentApiRepository + extends JpaRepository { + + List findByIncidentIdOrderByApiId(Long incidentId); + + void deleteByIncidentId(Long incidentId); +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java new file mode 100644 index 0000000..0e15ec7 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java @@ -0,0 +1,17 @@ +package com.eactive.apim.portal.djb.apistatus.incident.repository; + +import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncident; +import com.eactive.eai.rms.data.EMSDataSource; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +@EMSDataSource +public interface DjbApistatusIncidentRepository + extends JpaRepository, JpaSpecificationExecutor { + + Optional findByNoticeId(String noticeId); +} diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentTimelineRepository.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentTimelineRepository.java new file mode 100644 index 0000000..ca8dbe4 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentTimelineRepository.java @@ -0,0 +1,18 @@ +package com.eactive.apim.portal.djb.apistatus.incident.repository; + +import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncidentTimeline; +import com.eactive.eai.rms.data.EMSDataSource; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@EMSDataSource +public interface DjbApistatusIncidentTimelineRepository + extends JpaRepository { + + List findByIncidentIdOrderByEventAtAsc(Long incidentId); + + void deleteByIncidentId(Long incidentId); +}