fix(push/subscribe): 같은 user_id 의 여러 endpoint 동시 허용
옛 정책: 같은 user_id 의 다른 endpoint 자동 DELETE → 마지막 구독 1개만 유지 새 정책: 모든 endpoint 유지 (PC Chrome / 모바일 Chrome / 삼성 인터넷 / 앱 동시 구독 가능) 문제 사례: - momo125 가 모바일 Chrome 에서 구독 → DB (momo125, chrome_endpoint) - 그 후 삼성 인터넷에서 구독 시도 → DB 의 chrome_endpoint 가 삭제되며 삼성만 남음 - PC 에서 발송하면 양쪽 다 안 오는 케이스 발생 만료(404/410)된 endpoint 는 sendPush 내부에서 자동 정리되어 누적 위험 없음. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -33,13 +33,10 @@ export async function POST(req: NextRequest) {
|
||||
[createObjectId(), userId, endpoint, p256dh, auth, userAgent]
|
||||
);
|
||||
|
||||
// 같은 사용자의 이전 구독은 정리 — 마지막에 구독한 기기/앱 하나만 유지.
|
||||
// 브라우저(삼성 인터넷 등)로 먼저 구독해 둔 게 남아 앱이 아닌 브라우저 알림으로
|
||||
// 오던 문제 방지. (앱에서 다시 켜면 옛 브라우저 구독이 제거됨)
|
||||
await pool.query(
|
||||
`DELETE FROM momo_push_subscriptions WHERE user_id = $1 AND endpoint <> $2`,
|
||||
[userId, endpoint]
|
||||
).catch(() => {});
|
||||
// 옛 정책(같은 user_id 마지막 1개만 유지)은 제거 — 한 사용자가 PC Chrome /
|
||||
// 모바일 Chrome / 삼성 인터넷 / 모모유통 앱 등 여러 채널 동시 구독을 허용.
|
||||
// 만료(404/410)된 endpoint 는 sendPush 내부에서 자동 정리되므로 stale 누적 없음.
|
||||
// (참고: User-Agent 가 동일하고 endpoint 만 갱신된 경우는 위의 UPSERT 가 갱신 처리)
|
||||
|
||||
// 구독 직후 환영 푸시 — 전체 파이프라인(서버→푸시서비스→기기) 동작 즉시 확인용
|
||||
const welcome = await sendPush(
|
||||
|
||||
Reference in New Issue
Block a user