MSG-432 feat: 알림에 이동 대상을 저장해 푸시와 알림함으로 딥링크 재료를 내려준다 - #287
Merged
Merged
Conversation
- docs/prd/MSG-432-prd.md: 이동 대상(targetType+targetId) 저장·푸시 data·알림함 응답 계약, 카테고리별 대상 규칙, 앱 목적지 표, 변경 파일 목록(서버·앱), 미해결 질문 4건(FRIEND 목적지·REMIND 목적지·MODERATION 영상 접근·GRID 진입 깊이) - docs/srs.md FR-NOTI-12 계획 → 진행 중, docs/rtm.md 동기화 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Claude finished @Ss0Mae's task in 3m 39s —— View job 리뷰 완료
확인 범위: 발견
나머지는 미해결 질문 4건(§8)이 이미 문서 안에서 스스로 짚고 있는 설계 공백(FRIEND/REMIND 목적지, MODERATION 소유자 접근, GRID 진입 깊이)이라 별도로 지적하지 않았습니다. 병렬 브랜치 경합(마이그레이션 번호·developCode 대역·Owner 계약)은 이 PR이 실제 구현 파일을 건드리지 않아 해당 없음입니다. 작업 근거
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eb1JyNoKRBkea5A1p9e8rd
Q1 FRIEND는 홈(서버는 USER 기록), Q2 REMIND는 홈 유지, Q3 MODERATION은 VIDEO(재생 API가 소유자에게 BLINDED를 통과시킴), Q4 GRID는 이동·하이라이트까지. 2026-09-24 성민 확정. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
V56 target_type·target_id(NULL 허용, 짝·종류 CHECK). NotificationTarget 값 객체와 record 6인자 오버로드, 회차 시작 알림은 INSERT…SELECT 상수 열로 EVENT_OCCURRENCE 를 넣는다. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
FCM data 는 notificationId·category 에 대상이 있을 때만 targetType·targetId 를 더한다(빈 값 금지). notification 표시 필드와 웹푸시 설정은 그대로다. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
영상 완료·실패와 가림·해제는 영상, 핫구역은 격자, 뱃지 획득·임박은 뱃지, 친구 요청·수락은 상대 사용자, 일정 변경은 회차. 스트릭·주간 요약은 대상 없음으로 무변경. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
전체 빌드에서 ResponseSchemaNullabilityTest 가 잡았다. 이 레포의 required 는 값이 아니라 키 존재를 뜻해 nullable 필드도 목록에 든다 (MSG-319). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
테스트 커버리지
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎫 관련 티켓
작업 내용
docs/prd/MSG-432-prd.md미해결 질문 4건을 확정하고검토됨으로 올렸다 (2026-09-24 성민): FRIEND → 지도 홈(서버는USER기록), REMIND → 홈 유지, MODERATION → 영상 화면(재생 API가 소유자에게 BLINDED를 통과시킴), GRID → 격자 이동·하이라이트까지(셀 시트 안 열음)docs/spec/MSG-432.md신규 (D-1D-6, AC-432-0107, 작업 로그)notifications.target_type VARCHAR(20)·target_id VARCHAR(64)NULL 허용 + CHECK 2개(짝 일치chk_notifications_target_pair, 5종chk_notifications_target_type)NotificationTargetType(VIDEO·GRID·BADGE·EVENT_OCCURRENCE·USER) enum,NotificationTargetrecord(팩토리 5개, null 거부),Notification.target()조립 접근자NotificationCommandService.record6인자 오버로드(5인자는 null 위임).recordEventStart는 시그니처 그대로 두고 INSERT…SELECT 상수 열로EVENT_OCCURRENCE+ 회차 idNotificationSender.send(…, category, target)→FcmNotificationSender.dataOf: FCMdata에category항상, 대상 있을 때만targetType·targetId.notification표시 필드·웹푸시 설정 무변경(혼합 페이로드 유지)NotificationItemResponseDto+targetType·targetId(nullable, required 목록 포함)// 검증: FR-NOTI-12, AC-432-NN, RTM 재생성으로 AC 7개 전부 연결srs-changelog행,status.mdnotification 섹션 한 줄🤔 고민한 내용
event_key파싱이 아니라 별도 컬럼으로:event_key는 dedupe용 내부 키라 형식이 카테고리마다 다르고 응답 비노출이 계약(MSG-434)이다. 두 컬럼을 같은 INSERT 문장에 넣어 "대상 저장 실패가 알림 기록을 막는" 별도 경로가 없다.insert·insertEventStart)이라 DB가 최종 방어선. 카테고리 CHECK와 같은 방식이고 새 종류는 SRS 개정 + 마이그레이션이 같이 간다.recordEventStart시그니처 무변경: 이미 회차 id를 받으므로 SQL 상수 열로 처리해 호출자·테스트를 건드리지 않았다.data키 자체를 생략: 빈 문자열·"null"을 넣으면 앱 판정에 해석 여지가 생긴다. 기존 앱 버전은 모르는 키를 무시하므로 하위 호환.MulticastMessage는 읽기 접근자가 없어 data 조립을dataOf(...)정적 메서드로 떼어 단위 검증했다.required는 키 존재를 뜻한다(MSG-319 가드가 전체 빌드에서 잡아 수정).👀 리뷰 포인트
NotificationSender.send시그니처 변경이 인터페이스 구현체(FCM 1개)와 컨슈머 호출부·테스트 스텁 11곳을 함께 바꿨다. 놓친 호출부가 없는지(컴파일이 잡지만 목 스텁의any(), any()확장은 눈으로 확인 부탁)target_id VARCHAR(64)가 격자 id·숫자 id 모두에 충분한지(현재 격자 id 최대 길이 기준 여유 있음)검증: 전체 빌드 통과(테스트 3,196건, 스킵 6), 변경 영향 클래스 11개 236건 통과. Codex 교차 리뷰 스펙 1R·코드 1R 결함 없음.
🤖 Generated with Claude Code