-
Notifications
You must be signed in to change notification settings - Fork 0
Notification
grasshopper42 edited this page Nov 30, 2024
·
1 revision
시스템에서 발생하는 모든 알림을 처리하기 위한 정책을 정의합니다. 각 도메인에서 발생한 알림 이벤트를 수신하여 적절한 채널을 통해 사용자에게 전달합니다.
-
알림 기본 정보
- type: 알림 유형
- priority: 중요도 (CRITICAL/HIGH/MEDIUM/LOW)
- content: 알림 내용
- occurredAt: 발생 시각
-
참조 정보
- domain: 발생 도메인
- entityType: 엔티티 유형
- entityId: 엔티티 ID
- additionalInfo: 추가 정보
-
수신자 정보
- targetRoles: 수신 대상 역할 목록
- targetStaffIds: 특정 수신자 목록
-
CRITICAL
- 즉시 발송
- 모든 가능한 채널로 발송
- 수신 확인 필요
- 미확인 시 재발송
-
HIGH
- 즉시 발송
- 주요 채널로 발송
- 미확인 시 재발송
-
MEDIUM
- 배치 처리 (10분 간격)
- 기본 채널로 발송
-
LOW
- 배치 처리 (1시간 간격)
- 기본 채널로만 발송
- 이메일
- SMS
- 앱 푸시 알림
- 시스템 내 알림
-
STOCK_SHORTAGE: 재고 부족
- 중요도: HIGH
- 수신자: INVENTORY_MANAGER
- 채널: 전체
-
SAFETY_STOCK_REACHED: 안전재고 도달
- 중요도: MEDIUM
- 수신자: INVENTORY_MANAGER
- 채널: 이메일, 시스템
-
ORDER_STATUS_CHANGED: 주문 상태 변경
- 중요도: MEDIUM
- 수신자: SALES_MANAGER
- 채널: 시스템
-
RETURN_REQUESTED: 반품 요청
- 중요도: HIGH
- 수신자: SALES_MANAGER
- 채널: 전체
-
PURCHASE_CONFIRMED: 발주 확정
- 중요도: HIGH
- 수신자: INVENTORY_MANAGER
- 채널: 이메일, 시스템
-
RECEIVING_COMPLETED: 입고 완료
- 중요도: MEDIUM
- 수신자: INVENTORY_MANAGER, PURCHASE_MANAGER
- 채널: 시스템
interface NotificationEvent {
type: string;
priority: Priority;
targetRoles: string[];
targetStaffIds?: string[];
content: string;
occurredAt: Date;
referenceInfo: {
domain: string;
entityType: string;
entityId: string;
additionalInfo?: Record<string, any>;
};
}
-
이벤트 수신
- 도메인에서 발행한 NotificationEvent 수신
- 이벤트 유효성 검증
-
수신자 확인
- Staff 도메인에서 대상 수신자 조회
- 수신자별 알림 설정 확인
-
알림 생성
- 수신자별 알림 메시지 생성
- 채널별 포맷 적용
-
알림 발송
- 채널별 발송 처리
- 발송 이력 기록
-
후속 처리
- 발송 실패 시 재시도
- 중요 알림 수신 확인 체크
- CRITICAL: 1시간 간격, 최대 24회
- HIGH: 3시간 간격, 최대 8회
- 수신 확인 시 재발송 중단
-
알림 발송 현황
- 유형별 발송 건수
- 채널별 발송 건수
- 실패율
-
수신 확인 현황
- 중요 알림 수신 확인율
- 미확인 알림 현황
-
성능 지표
- 알림 발송 소요 시간
- 채널별 발송 성공률
- 알림 이력: 1년 보관
- 발송 이력: 6개월 보관
- 수신 확인 이력: 6개월 보관