Skip to content

feat: 관리자 알림에 학번 끝자리 홀/짝수 타깃 필터 추가 - #328

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

Hidden character warning

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

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

Conversation

@KimWash

@KimWash KimWash commented Aug 15, 2026

Copy link
Copy Markdown
Member

Closes #324

무엇을

관리자 푸시 알림 폼의 "2. 하위 세부 기능/활동 타깃 필터"에 학번 끝자리 홀수 / 짝수 선택지를 추가한다.

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

기존에는 STUDENT_IDS에 학번을 전부 나열하는 것 말고는 방법이 없어 사실상 불가능했다.

변경 사항

파일 내용
src/types/admin.ts AdminNotificationSubFilter 유니온에 STUDENT_ID_ODD, STUDENT_ID_EVEN 추가
src/containers/mobile/admin/NotificationFormModal.tsx SUB_FILTER_OPTIONS에 선택지 2개 추가

하위 필터는 서버에서 상위 대상 그룹과 교집합으로 적용되므로 "컴퓨터공학부 ∩ 홀수 학번" 같은 조합이 그대로 동작한다. 기존 필터들과 UI 흐름이 같아 별도 입력 폼은 필요 없다.

의존

서버 지원 필요 — inu-appcenter/inu-portal-server#377 이 먼저 배포되어야 실제 발송이 동작한다.

확인

  • npx tsc --noEmit — 이번 변경으로 인한 에러 없음
    (TimetableImageImportModal.tsxtesseract.js 모듈 미설치 에러 2건은 기존 문제로, 이 PR과 무관하다.)
  • npm run lint는 레포 전체가 이미 깨져 있어(ESLint 9인데 설정이 flat config가 아닌 .eslintrc.cjs) 실행하지 못했다. 별도 이슈로 다룰 사안.

https://claude.ai/code/session_01RFpoWznxXnyEpkibznzwUf

수강신청이 학번 끝자리 홀/짝수로 나뉘어 진행되는데, 기존에는 STUDENT_IDS로
학번을 전부 나열하는 것 말고는 해당 대상만 추려낼 방법이 없었다.

서버에서 상위 대상 그룹과 교집합으로 적용되는 subFilter에 값이 추가되어,
웹은 선택지 2개와 타입 유니온만 맞춰주면 된다. 학과·로그인 여부 등 상위
그룹과의 조합도 그대로 동작한다.

서버: inu-appcenter/inu-portal-server#377

Claude-Session: https://claude.ai/code/session_01RFpoWznxXnyEpkibznzwUf
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying intip-test with  Cloudflare Pages  Cloudflare Pages

Latest commit: 9b88eaf
Status: ✅  Deploy successful!
Preview URL: https://d255c236.intip-test.pages.dev
Branch Preview URL: https://324-feat.intip-test.pages.dev

View logs

hjunieee pushed a commit to hjunieee/intip-web that referenced this pull request Aug 27, 2026
…nter#311)

server inu-appcenter#328(대표 시간표 자동 승격)이 아직 미완성이라, /friends/{id}/primary가
요청한 학기와 다른 학기의 시간표를 대표로 잘못 내려줄 가능성이 있다. 이 PR은
그 근본 원인(서버)을 고치지 못하지만, 최소한 프론트가 틀린 데이터를 진짜인
것처럼 보여주지는 않게 막는다 - 이슈 본문의 (선택) 방어 로직 항목을 반영.

- isSemesterMismatch(detail, requested) 추가 - 응답의 year/term이 요청한
  openSemester와 다르면 감지한다.
- 어긋나면 상태를 ERROR로 처리(신뢰할 수 없는 데이터임을 안내)하고, 그리드에도
  올리지 않는다(상태만 감춰도 friendTimetablesByFriendId가 별도로 items를
  올리면 블록은 그대로 그려지므로 둘 다 막아야 한다).
- console.warn으로 friendId/요청 학기/응답 학기를 남겨, 재현 시 서버 쪽
  원인 조사에 바로 쓸 수 있게 한다.

server #328이 실제로 반영되기 전까지는 이 방어 로직이 언제 발동하는지로
문제 재현 여부를 간접적으로 확인할 수 있다. 근본 해결은 여전히 서버 쪽 작업이라
이슈는 닫지 않는다.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@KimWash
KimWash deleted the branch dev August 30, 2026 12:05
@KimWash KimWash closed this Aug 30, 2026
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