Skip to content

Merge dev to master - 출석 리더 알림 + Discord + 명찰 알림 + 버그 수정#513

Merged
wnsvy607 merged 14 commits into
masterfrom
develop
May 22, 2026
Merged

Merge dev to master - 출석 리더 알림 + Discord + 명찰 알림 + 버그 수정#513
wnsvy607 merged 14 commits into
masterfrom
develop

Conversation

@wnsvy607

Copy link
Copy Markdown
Contributor

PR 타입

Release

개요

develop의 변경사항을 master로 머지. prod 배포 대상.

주요 변경사항

🆕 신규 기능

🐛 버그 수정

🔧 기타

prod 사전 조건

  • admin_member.member_id 컬럼 (이미 적용됨)
  • ✅ 리더 AdminMember의 memberId 연결 (14명 모두 연결됨)
  • ✅ Discord 웹훅 URL (prod yml에 ENC로 설정됨)
  • 명찰 알림 시간 기본값 10시 → Storage 키 미설정 시 그대로 사용

prod 배포 시 영향

  • 출석 마감 3분 전 → 리더에게 FCM 푸시 + Discord 웹훅 발송
  • 지각 마감 3분 전 → 동일
  • 지각 마감 시점 → Discord에 최종 출석 결과
  • 오프라인 공식 세미나 당일 10시 → 리더에게 명찰 준비 푸시
  • 기존 멤버 출석 알림(Starting/Started/Ending)은 영향 없음

🤖 Generated with Claude Code

wnsvy607 and others added 14 commits April 13, 2026 22:36
dev/prod 동일 채널 사용으로 인한 알림 혼동 해결.
dev 전용 채널의 웹훅 URL을 Jasypt 암호화하여 member-develop.yml에 반영.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@value 환경변수 대신 StorageService.findByKey()로 DB에서 조회.
Admin API로 즉시 변경 가능하며, Storage에 키가 없으면 기본값 3분 적용.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
StorageService.findByKey()가 키 미존재 시 예외를 던져서
@transactional(readOnly) 트랜잭션이 rollback-only로 마킹되는 문제.
예외를 던지지 않는 findByKeyOptional()을 추가하고 사용하도록 변경.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- StorageServiceTest: findByKeyOptional 존재/미존재, findByKey 예외 (3개)
- AttendanceFacadeServiceLeaderNotiTest: Storage 키 미존재 시 기본값, 키 존재 시 값 사용, AttendanceCode 없을 때 푸시 미발송 (3개)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
sendLeaderPushNoti(), sendAttendanceFinalResultToDiscord()에서
scheduleType이 ALL이 아니면 skip하도록 조건 추가.
플랫폼별 세미나, 버디미션 등에서는 리더 알림이 발동되지 않음.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
매시 정각에 당일 오프라인 공식 세미나(scheduleType=ALL, location!=null)를 확인하고,
Storage에서 설정한 시간(기본 10시)에 리더/서브리더에게 명찰 준비 FCM 푸시 발송.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
기존 isOnline()은 좌표가 null인지로 판별했으나, 관리자 입력 실수로
오프라인 세미나가 온라인으로 잘못 분류되는 문제가 있음.
ScheduleService.createLocation()에서 이미 온라인일 때
detailAddress="ZOOM"으로 저장하고 있으므로 이를 기반으로 판별.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Between → GreaterThanEqual/LessThan으로 변경하여 다음날 00:00 스케줄 중복 알림 방지
- resolveLeadersByPlatform() 호출을 루프 밖으로 이동하여 N번 DB 쿼리 제거
- SEMINAR_REMINDER_HOUR 관련 상수를 클래스 상단으로 이동

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@wnsvy607
wnsvy607 merged commit bd6f467 into master May 22, 2026
5 checks passed
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