왜
앱의 알림 화면은 UI 만 있고 데이터가 전부 하드코딩이다. 홈의 안읽음 배지도 그 가짜 목록을 세고 있어, 사용자가 보는 숫자가 실제로 아무것도 가리키지 않는다. 서버에 알림을 담을 자리와 읽음 상태가 없어서 생긴 일이다.
프론트(조영찬)는 알림 목록·하나 읽음·전체 읽음 세 개의 엔드포인트를 요청했고, 알림 종류(type)는 서버가 정해 주면 앱이 그 값에 아이콘·문구를 맞추겠다고 했다.
무엇을
GET /api/v1/notifications — 소유자의 알림 목록 + 안읽음 개수
PATCH /api/v1/notifications/{id}/read — 하나 읽음
POST /api/v1/notifications/read-all — 전체 읽음
정해야 할 것:
type 목록. 앱이 아이콘·문구를 맞출 키다. 지금 실제로 보낼 근거가 있는 종류만 정의한다(쓰지도 않을 종류를 미리 나열하지 않는다).
- 문구의 주인. 프론트가 type 에 문구를 맞추겠다고 했으므로 서버는 type 만 내려보낸다. 이 레포의
OpeningStatus 와 같은 방식이다.
- 읽음 처리의 계약. 남의 알림을 id 만으로 읽음 처리할 수 있으면 안 된다. 없는 id 와 남의 id 는 존재 여부를 흘리지 않게 같은 답을 준다(
CourseStorageService.get 선례).
- 페이지네이션. 알림은 쌓이는 데이터다.
page·size 를 Paging 규약대로 받는다. 안읽음 개수는 페이지와 무관한 전체 수다.
- 소유 키. 코스·연차와 같은
X-Guest-Id 를 따른다. 소셜 로그인이 붙으면 함께 user_id 로 옮긴다.
범위 밖
- 알림 생성(스케줄러가 "내일 여행" 을 넣는 것)과 실제 FCM 발송. 후속 이슈로 남긴다.
왜
앱의 알림 화면은 UI 만 있고 데이터가 전부 하드코딩이다. 홈의 안읽음 배지도 그 가짜 목록을 세고 있어, 사용자가 보는 숫자가 실제로 아무것도 가리키지 않는다. 서버에 알림을 담을 자리와 읽음 상태가 없어서 생긴 일이다.
프론트(조영찬)는 알림 목록·하나 읽음·전체 읽음 세 개의 엔드포인트를 요청했고, 알림 종류(
type)는 서버가 정해 주면 앱이 그 값에 아이콘·문구를 맞추겠다고 했다.무엇을
GET /api/v1/notifications— 소유자의 알림 목록 + 안읽음 개수PATCH /api/v1/notifications/{id}/read— 하나 읽음POST /api/v1/notifications/read-all— 전체 읽음정해야 할 것:
type목록. 앱이 아이콘·문구를 맞출 키다. 지금 실제로 보낼 근거가 있는 종류만 정의한다(쓰지도 않을 종류를 미리 나열하지 않는다).OpeningStatus와 같은 방식이다.CourseStorageService.get선례).page·size를Paging규약대로 받는다. 안읽음 개수는 페이지와 무관한 전체 수다.X-Guest-Id를 따른다. 소셜 로그인이 붙으면 함께user_id로 옮긴다.범위 밖