점검 공지 사전 발송 예약/결과 관리 기능 추가
eapim-portal CI (from elink-portal-common) / build (push) Has been cancelled
eapim-portal CI (from elink-portal-common) / build (push) Has been cancelled
- DjbApistatusIncidentPrenotice Entity/Repository 추가 - 사전 발송 시각 및 결과 관리 로직 PortalNoticeManService에 추가 - UI에 사전 발송 관련 Feature 추가 및 Validation 포함
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
|||||||
|
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.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 점검 공지의 사전발송 예약/결과. {@link DjbApistatusIncident} 와 1:1 이며 PK 를 공유한다.
|
||||||
|
*
|
||||||
|
* <p>행이 존재한다는 것 자체가 "사전 발송이 예약되어 있다"는 뜻이다 - 관리자가 사전 발송 시각을
|
||||||
|
* 비우고 저장하면(아직 미발송인 경우) 행을 지운다.</p>
|
||||||
|
*
|
||||||
|
* <p>{@code RUN_AT}/{@code RESULT}/{@code TARGET_CNT}/{@code SENT_CNT}/{@code FAIL_MSG} 는
|
||||||
|
* 향후 발송 스케줄러가 채우는 자리다. 관리자 화면은 읽기만 한다.</p>
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "DJB_APISTATUS_INCIDENT_PRENOTICE")
|
||||||
|
@Data
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class DjbApistatusIncidentPrenotice extends Auditable {
|
||||||
|
|
||||||
|
/** 상위 INCIDENT 의 PK 를 그대로 쓴다 (생성 전략 없음 - 저장 시 직접 대입). */
|
||||||
|
@Id
|
||||||
|
@Column(name = "INCIDENT_ID", nullable = false)
|
||||||
|
private Long incidentId;
|
||||||
|
|
||||||
|
@Column(name = "PRENOTI_AT", nullable = false)
|
||||||
|
private LocalDateTime prenotiAt;
|
||||||
|
|
||||||
|
@Column(name = "RUN_AT")
|
||||||
|
private LocalDateTime runAt;
|
||||||
|
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
@Column(name = "RESULT", length = 20, nullable = false)
|
||||||
|
private PrenoticeResult result = PrenoticeResult.PENDING;
|
||||||
|
|
||||||
|
@Column(name = "TARGET_CNT")
|
||||||
|
private Integer targetCnt;
|
||||||
|
|
||||||
|
@Column(name = "SENT_CNT")
|
||||||
|
private Integer sentCnt;
|
||||||
|
|
||||||
|
@Column(name = "FAIL_MSG", length = 2000)
|
||||||
|
private String failMsg;
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
package com.eactive.apim.portal.djb.apistatus.incident.entity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 점검 사전발송 결과.
|
||||||
|
*
|
||||||
|
* <p>{@link #PENDING} 인 동안에만 관리자가 사전 발송 지정 시각을 고칠 수 있다.
|
||||||
|
* 발송 작업이 한 번이라도 돌면({@link #SUCCESS}/{@link #FAIL}) 지정 시각은 이력이 되어 잠긴다.</p>
|
||||||
|
*
|
||||||
|
* <p>{@link #SUCCESS} 라도 발송 성공 건수가 0 일 수 있다 - 구독 대상이 한 건도 없었던 경우다.
|
||||||
|
* 실제 발송 시각·응답은 Webhook 발송 내역(PTL_WEBHOOK_SEND_LOG)에서 확인한다.</p>
|
||||||
|
*/
|
||||||
|
public enum PrenoticeResult {
|
||||||
|
|
||||||
|
/** 대기 - 아직 발송 작업이 돌지 않음 */
|
||||||
|
PENDING,
|
||||||
|
|
||||||
|
/** 성공 */
|
||||||
|
SUCCESS,
|
||||||
|
|
||||||
|
/** 실패 */
|
||||||
|
FAIL;
|
||||||
|
|
||||||
|
/** 발송 작업이 이미 수행되었는지 여부 (지정 시각 수정 불가 판단) */
|
||||||
|
public boolean isSent() {
|
||||||
|
return this != PENDING;
|
||||||
|
}
|
||||||
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
package com.eactive.apim.portal.djb.apistatus.incident.repository;
|
||||||
|
|
||||||
|
import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncidentPrenotice;
|
||||||
|
import com.eactive.eai.rms.data.EMSDataSource;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
@EMSDataSource
|
||||||
|
public interface DjbApistatusIncidentPrenoticeRepository
|
||||||
|
extends JpaRepository<DjbApistatusIncidentPrenotice, Long> {
|
||||||
|
|
||||||
|
void deleteByIncidentId(Long incidentId);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user