유령 닉네임 복구 가능하게 수정 (마을 불러오기 실패 원인)
- 등록만 되고 세이브가 저장된 적 없는(data NULL) 닉네임은 중복 체크에서 사용 가능으로, 재등록 시 새 토큰으로 재선점 - 불러오기 실패 시 "서버에 닿지 않아" 대신 "그 이름의 마을은 없는걸?" Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
@@ -78,7 +78,7 @@ export default function NicknameModal({ onDone }: { onDone: () => void }) {
|
||||
} else {
|
||||
const found = await recoverVillage(trimmed);
|
||||
if (!found) {
|
||||
setStatus("offline");
|
||||
setStatus("available"); // 불러오기 모드에선 "그 이름의 마을은 없는걸?"
|
||||
setSubmitting(false);
|
||||
return;
|
||||
}
|
||||
|
||||
+7
-4
@@ -24,9 +24,11 @@ export function validNickname(name: unknown): name is string {
|
||||
|
||||
export async function isAvailable(nickname: string): Promise<boolean> {
|
||||
await ensureTable();
|
||||
const r = await db.query("SELECT 1 FROM villages WHERE nickname = $1", [
|
||||
nickname,
|
||||
]);
|
||||
// 데이터가 저장된 적 없는 유령 등록은 재사용 가능
|
||||
const r = await db.query(
|
||||
"SELECT 1 FROM villages WHERE nickname = $1 AND data IS NOT NULL",
|
||||
[nickname],
|
||||
);
|
||||
return r.rowCount === 0;
|
||||
}
|
||||
|
||||
@@ -36,7 +38,8 @@ export async function register(nickname: string, token: string): Promise<boolean
|
||||
const r = await db.query(
|
||||
`INSERT INTO villages (nickname, token, data)
|
||||
VALUES ($1, $2, NULL)
|
||||
ON CONFLICT (nickname) DO NOTHING`,
|
||||
ON CONFLICT (nickname) DO UPDATE SET token = EXCLUDED.token, updated_at = now()
|
||||
WHERE villages.data IS NULL`,
|
||||
[nickname, token],
|
||||
);
|
||||
return (r.rowCount ?? 0) > 0;
|
||||
|
||||
새 이슈에서 참조
사용자 차단