Skip to content

[ Feature ] - 월간 AI 리포트 생성 완료 알림 추가 #192

Description

@bigwaveBigwave

🛠️ 계획된 개발 기능

월간 AI 리포트가 정상적으로 생성되면 사용자에게 앱 내 알림과 웹 푸시를 전송합니다.

현재 월간 리포트 생성 후 구독 조건을 만족하는 사용자에게 이메일은 자동으로 발송되지만, 앱에서는 리포트 생성 완료 사실을 안내하지 않습니다.

기존 notification-service를 활용하여 사용자가 새 월간 리포트 생성 여부를 확인할 수 있도록 합니다.

🛠 기능 구현 세부사항

  • 사용자·연월의 AI_REPORT 저장이 성공한 이후 알림을 생성합니다.
  • 리포트 생성에 실패하면 알림을 생성하지 않습니다.
  • 기존 NotificationCommandClientNotificationCreateCommand를 재사용합니다.
  • 알림 유형은 AI_REPORT를 사용합니다.
  • 알림 제목과 본문은 다음 형식을 사용합니다.
제목: 월간 AI 리포트가 생성되었어요
본문: 2026년 7월 소비 분석과 맞춤 추천을 확인해 보세요.
  • 월간 배치 재실행 시 동일 사용자·동일 연월에 중복 알림이 생성되지 않도록 멱등성 키를 사용합니다.

AI_REPORT_CREATED:{userId}:{yearMonth}

  • notification-service의 기존 eventId 중복 방지 로직을 재사용합니다.
  • 기존 alarm_agree 정책을 유지합니다.
  • 알림 수신에 동의하지 않은 사용자는 알림 저장과 웹 푸시를 건너뜁니다.
  • 이메일 발송 여부와 리포트 생성 알림은 분리합니다.
  • 이메일 미등록, 구독 미대상 또는 SMTP 실패로 이메일이 발송되지 않더라도 리포트가 정상 생성됐다면 알림을 생성합니다.
  • 알림 생성 실패가 리포트 저장, 자동 이메일 발송 또는 다른 사용자의 월간 배치를 중단시키지 않도록 실패를 격리합니다.
  • BFF 알림 조회 응답에서 AI_REPORT 유형이 정상적으로 전달되는지 확인합니다.
  • 프론트에서 알림 선택 시 해당 연월의 월간 리포트 화면으로 이동할 수 있는지 확인합니다.

🛠 참고사항

  • 새로운 알림 테이블이나 별도 발송 이력을 추가하지 않습니다.
  • 기존 Notification Client와 DTO를 재사용합니다.
  • 월간 리포트 생성 및 소비 집계 로직은 변경하지 않습니다.
  • 월간 배치 스케줄러 실행 시간은 변경하지 않습니다.
  • 자동 이메일 발송 대상과 정책은 변경하지 않습니다.
  • 이메일 재시도 기능은 추가하지 않습니다.
  • 사용자 alarm_agree 정책은 변경하지 않습니다.
  • PDF, FastAPI 및 BFF의 기존 API 계약은 불필요하게 변경하지 않습니다.
  • 알림 화면 이동에 추가 정보가 필요하다면 프론트 및 BFF 담당자와 계약을 먼저 합의합니다.

📝 check-lists

  • 월간 AI 리포트 저장 성공 후 알림 생성
  • 리포트 저장 실패 시 알림 미생성
  • AI_REPORT 알림 유형 적용
  • 사용자·연월 기반 멱등성 eventId 적용
  • 동일 사용자·동일 연월의 중복 알림 방지
  • 서로 다른 사용자 또는 연월의 알림 정상 생성
  • 기존 alarm_agree 정책 유지
  • 이메일 발송 여부와 알림 생성 흐름 분리
  • 알림 실패가 월간 배치와 이메일 발송에 영향을 주지 않도록 격리
  • BFF 알림 조회 응답에서 AI_REPORT 유형 확인
  • 프론트 월간 리포트 화면 이동 연동 확인
  • ai-service 관련 테스트 통과
  • notification-service 관련 테스트 통과
  • bff-service 관련 테스트 통과
  • 전체 WAR 빌드 성공

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions