Skip to content

#589 [Feat] 미등록 이용권 등록기한 임박 알림 대상 조회·발송 기록 - #590

Merged
HYH0804 merged 1 commit into
devfrom
feat/#589
Oct 28, 2026
Merged

HYH0804 merged 1 commit into
devfrom
feat/#589

Conversation

@HYH0804

@HYH0804 HYH0804 commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

#️⃣ 연관된 이슈

📝 작업 내용

✨ Feat

내용 파일
등록기한 알림 단계 D30(7일 초과~30일 이내)·D7(7일 이내) 정의 RegisterReminderStage.java
알림 발송 이력 엔티티·리포지토리 (ticket_register_reminders) TicketRegisterReminder.java, TicketRegisterReminderRepository.java
대상 조회 JPQL: DELIVERED·UNREGISTERED, 등록기한 구간 안, 해당 단계 SUCCESS 기록 없음 ClassTicketRepository.java
GET /api/v1/admin/funding/register-reminders?stage=D30|D7 대상 목록 (후원자 연락처, 남은 일수 포함) AdminFundingController.java, AdminFundingService.java, RegisterReminderTargetResponse.java
POST /api/v1/admin/funding/tickets/{ticketId}/register-reminders 발송 결과 기록 AdminFundingController.java, AdminFundingService.java, RegisterReminderRequest.java, RegisterReminderResponse.java
펀딩 현황 요약에 registerReminderD30, registerReminderD7 추가 FundingSummaryResponse.java
마이그레이션 (+ 롤백) V20261028_03__create_ticket_register_reminders.sql, V20261028_rollback__create_ticket_register_reminders.sql
API 명세 §9.8·§9.9, ERD 갱신 class-api.md, class.puml
통합 테스트 (구간 판정, 실패/성공 기록, 409·400·403) AdminFundingApiIntegrationTest.java

📌 공유 사항

  1. PRD "등록기한 30일·7일 전 알림은 허용된 연락 수단에서만 발송" 기준입니다. 미등록 이용권은 앱 계정과 연결되지 않아 푸시를 보낼 수 없고, 메일·SMS 발송 인프라도 없습니다. 그래서 코드 전달(9.4)과 같은 방식으로 운영자가 후원자 연락처로 보낸 뒤 결과를 기록합니다.
  2. 대상은 조회할 때 계산하므로 배치나 스케줄러가 없습니다. SUCCESS로 기록하면 그 단계 대상에서 빠지고, FAILED는 대상에 남아 재시도할 수 있습니다.
  3. 운영 DB에는 V20261028_03 적용이 필요합니다. 아직 적용되지 않은 V20261028_01·_02와 함께 적용하면 됩니다.

✅ 체크리스트

  • Reviewer에 팀원들을 선택했나요?
  • Assignees에 본인을 선택했나요?
  • 컨벤션에 맞는 Type을 선택했나요?
  • Development에 이슈를 연동했나요?
  • Merge 하려는 브랜치가 올바르게 설정되어 있나요?
  • 컨벤션을 지키고 있나요?
  • 로컬에서 실행했을 때 에러가 발생하지 않나요?
  • 팀원들에게 PR 링크 공유를 했나요?

📸 스크린샷

  • AdminFundingApiIntegrationTest 6/6 통과 (KST, UTC 타임존 모두)
  • ticket·classroom 테스트 전체 통과

💬 리뷰 요구사항

  1. 자동 발송 대신 "대상 조회 + 운영자 발송 기록"으로 설계했습니다. 추후 메일 발송 인프라가 생기면 기록 API를 그대로 재사용할 수 있는 구조인지 봐주세요.

🤖 Generated with Claude Code

https://claude.ai/code/session_013pr5xNDiEmzxnZ2AbtHxVy

- GET /api/v1/admin/funding/register-reminders?stage=D30|D7: 전달 완료·미등록 이용권 중 등록기한 구간에 들고 해당 단계 알림을 성공 기록하지 않은 건
- POST /api/v1/admin/funding/tickets/{ticketId}/register-reminders: 운영자 발송 결과 기록 (ticket_register_reminders)
- 펀딩 현황 요약에 registerReminderD30 / registerReminderD7 추가
- 마이그레이션 V20261028_03 (+ 롤백), API 명세·ERD 갱신, 통합 테스트 추가

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013pr5xNDiEmzxnZ2AbtHxVy
@HYH0804 HYH0804 self-assigned this Oct 28, 2026
@HYH0804
HYH0804 merged commit 1dc6db2 into dev Oct 28, 2026
1 check passed
@HYH0804
HYH0804 deleted the feat/#589 branch October 28, 2026 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant