diff --git a/src/components/game/NicknameModal.tsx b/src/components/game/NicknameModal.tsx index da4baf9..39696b8 100644 --- a/src/components/game/NicknameModal.tsx +++ b/src/components/game/NicknameModal.tsx @@ -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; } diff --git a/src/lib/villages.ts b/src/lib/villages.ts index 2f9764f..aae00d5 100644 --- a/src/lib/villages.ts +++ b/src/lib/villages.ts @@ -24,9 +24,11 @@ export function validNickname(name: unknown): name is string { export async function isAvailable(nickname: string): Promise { 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 0;