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