Skip to content

✨ feat: 관리자 푸시 알림 학번 끝자리 홀/짝수 타게팅 필터 추가 - #377

Open
KimWash wants to merge 1 commit into
devfrom
376-feat-학번-홀짝-푸시-타게팅

Hidden character warning

The head ref may contain hidden characters: "376-feat-\ud559\ubc88-\ud640\uc9dd-\ud478\uc2dc-\ud0c0\uac8c\ud305"
Open

KimWash wants to merge 1 commit into
devfrom
376-feat-학번-홀짝-푸시-타게팅

Conversation

@KimWash

@KimWash KimWash commented Aug 15, 2026

Copy link
Copy Markdown
Member

Closes #376

무엇을

관리자 푸시 알림(POST /api/fcm/admin)에 학번 끝자리 홀/짝수 타게팅을 추가한다.

수강신청은 학번 끝자리 홀/짝수로 날짜가 나뉜다. "오늘은 홀수 수강신청 기간이예요!" 같은 알림을 해당 대상에게만 보내기 위함.

왜 subFilter인가

targetType이 아니라 하위 subFilter에 넣었다.

  • targetType은 단일 선택이라 상위 그룹으로 두면 학과·로그인 여부와 조합할 수 없다.
  • subFilterFcmService#getAdminNotificationTargets에서 상위 대상과 교집합으로 적용되므로, "컴퓨터공학부 ∩ 홀수 학번" 조합이 추가 작업 없이 따라온다.

변경 사항

파일 내용
AdminNotificationSubFilter STUDENT_ID_ODD, STUDENT_ID_EVEN 추가
MemberRepository findIdsByStudentIdEndingOdd(), findIdsByStudentIdEndingEven() 추가
FcmService#getSubFilterTargetMemberIds 신규 2개 분기 추가
MemberStudentIdParityRepositoryTest 신규 쿼리 검증 테스트 3건

studentIdString 컬럼이라 캐스팅·MOD 없이 마지막 글자를 문자열로 비교했다.

WHERE SUBSTRING(m.studentId, LENGTH(m.studentId), 1) IN ('1', '3', '5', '7', '9')

DB 함수 의존이 없어 이식성이 안전하고, 관리자 전용 저빈도 API라 풀스캔 비용도 문제되지 않는다.

엣지 케이스

  • 끝자리가 숫자가 아닌 학번(20200123A)은 홀·짝 양쪽 모두에서 제외 — 테스트로 고정했다.
  • student_idnullable = false이고 nickname이 학번에서 파생되므로 학번 없는 회원은 애초에 존재할 수 없다.

테스트

MemberStudentIdParityRepositoryTest 3건 통과 (H2, @DataJpaTest).

  • 끝자리 홀수만 조회되는지
  • 끝자리 짝수만 조회되는지 (0도 짝수로 포함)
  • 끝자리가 숫자가 아니면 양쪽 다 제외되는지

연관

웹 관리자 UI: inu-appcenter/inu-portal-web#324

https://claude.ai/code/session_01RFpoWznxXnyEpkibznzwUf

수강신청이 학번 끝자리 홀/짝수로 나뉘어 진행되는데, 기존 타게팅 수단으로는
해당 대상만 추려낼 방법이 없었다. STUDENT_IDS는 학번을 전부 나열해야 해서
실질적으로 사용이 불가능하다.

targetType이 아니라 subFilter에 추가한다. targetType은 단일 선택이라 상위로
두면 학과·로그인 여부와 조합할 수 없지만, subFilter는 상위 대상과 교집합으로
적용되므로 "컴퓨터공학부 ∩ 홀수 학번" 같은 조합이 그대로 가능하다.

studentId가 String 컬럼이라 캐스팅이나 MOD 없이 마지막 글자를 문자열로
비교한다. 끝자리가 숫자가 아닌 학번은 양쪽 모두에서 제외된다.

Claude-Session: https://claude.ai/code/session_01RFpoWznxXnyEpkibznzwUf
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.

✨ feat : 관리자 푸시 알림 - 학번 끝자리 홀/짝수 타게팅 필터 추가

1 participant