점검 공지 사전 발송 예약/결과 관리 기능 추가
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