문제
로그아웃 상태에서 담은 부를 곡이 로그인하는 순간 목록에서 사라진다.
useToSingSongQuery(isAuthenticated, guestToSingSongs)가 isAuthenticated로 queryKey와 queryFn을 통째로 갈아타, 로그인하면 서버 응답만 반환한다. 게스트 목록은 localStorage(guest_to_sing)에 그대로 남아 있지만 화면에서 보이지 않는다. clearGuestToSingSongs는 어디에서도 호출되지 않는다 — 병합 코드가 애초에 없다.
데이터 자체는 지워지지 않으므로, 병합을 붙이면 과거에 목록을 잃었던 사용자도 같은 기기에서 자동 복구된다.
해결 방향
카카오 로그인은 /api/auth/callback에서 서버 리다이렉트로 끝나 전체 페이지가 다시 뜬다. 클라이언트에 "로그인 성공" 시점이 없으므로 전환을 감지하는 대신 불변식을 지킨다 — 로그인 상태에서는 게스트 목록이 비어 있어야 한다.
작업 체크리스트
참고
기존 /api/songs/tosing/array를 재사용하지 않는 이유: 중복 검사가 없어 이미 담긴 곡과 겹치면 배치 insert 전체가 깨지거나 목록에 같은 곡이 두 번 뜬다. 삭제된 곡 id가 섞이면 FK 위반으로 역시 배치가 깨지고, 그러면 로컬이 비워지지 않아 방문할 때마다 재시도가 반복된다.
Supabase에서 tosings의 (user_id, song_id) 유니크 제약 여부 확인 필요 — 현재 중복 방지가 애플리케이션 레이어에만 있다.
문제
로그아웃 상태에서 담은 부를 곡이 로그인하는 순간 목록에서 사라진다.
useToSingSongQuery(isAuthenticated, guestToSingSongs)가isAuthenticated로 queryKey와 queryFn을 통째로 갈아타, 로그인하면 서버 응답만 반환한다. 게스트 목록은 localStorage(guest_to_sing)에 그대로 남아 있지만 화면에서 보이지 않는다.clearGuestToSingSongs는 어디에서도 호출되지 않는다 — 병합 코드가 애초에 없다.데이터 자체는 지워지지 않으므로, 병합을 붙이면 과거에 목록을 잃었던 사용자도 같은 기기에서 자동 복구된다.
해결 방향
카카오 로그인은
/api/auth/callback에서 서버 리다이렉트로 끝나 전체 페이지가 다시 뜬다. 클라이언트에 "로그인 성공" 시점이 없으므로 전환을 감지하는 대신 불변식을 지킨다 — 로그인 상태에서는 게스트 목록이 비어 있어야 한다.작업 체크리스트
POST /api/songs/tosing/merge신설 — 실재하는 곡만, 이미 담긴 곡은 건너뛰고, 기존 목록 뒤에 appenduseMergeGuestToSing훅 — 성공했을 때만 로컬을 비워 실패 시 다음 방문에 재시도AuthProvider에서 호출참고
기존
/api/songs/tosing/array를 재사용하지 않는 이유: 중복 검사가 없어 이미 담긴 곡과 겹치면 배치 insert 전체가 깨지거나 목록에 같은 곡이 두 번 뜬다. 삭제된 곡 id가 섞이면 FK 위반으로 역시 배치가 깨지고, 그러면 로컬이 비워지지 않아 방문할 때마다 재시도가 반복된다.Supabase에서
tosings의(user_id, song_id)유니크 제약 여부 확인 필요 — 현재 중복 방지가 애플리케이션 레이어에만 있다.