From cb2d1f34d377c633d7c23c7b6ffc8b1460e2728a Mon Sep 17 00:00:00 2001 From: koreacomp5 Date: Mon, 10 Nov 2025 11:26:00 +0900 Subject: [PATCH] =?UTF-8?q?admin=20=EA=B6=8C=ED=95=9C=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 2 +- prisma/seed.js | 20 ++++++-- src/app/admin/users/page.tsx | 2 + src/app/components/HorizontalCardScroller.tsx | 4 +- src/app/components/SendMessageForm.tsx | 2 +- src/middleware.ts | 46 +++++++++++++++++-- 6 files changed, 65 insertions(+), 11 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c5713eb..94fd73d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -225,7 +225,7 @@ model Post { // 사용자 model User { - userId String @id @default(cuid()) + userId String @id nickname String @unique passwordHash String? name String diff --git a/prisma/seed.js b/prisma/seed.js index 9d79ca6..f5a8fea 100644 --- a/prisma/seed.js +++ b/prisma/seed.js @@ -121,16 +121,29 @@ async function createRandomUsers(count = 100) { const createdUsers = []; for (let i = 0; i < count; i++) { - // 닉네임을 결정론적으로 생성해 재실행 시 중복 생성 방지 - const nickname = `user${String(i + 1).padStart(3, "0")}`; - const existing = await prisma.user.findUnique({ where: { nickname } }); + // 고정 ID: user001, user002, ... + const userId = `user${String(i + 1).padStart(3, "0")}`; + const existing = await prisma.user.findUnique({ where: { userId } }); let user = existing; if (!existing) { const name = generateRandomKoreanName(); const birth = randomDate(1975, 2005); const phone = await findAvailablePhone(i + 2); // admin이 0001 사용하므로 겹치지 않도록 오프셋 + // 닉네임: 중복 없는 랜덤 한글 생성 + let nickname = generateRandomKoreanName(); + for (let tries = 0; tries < 10; tries++) { + const dup = await prisma.user.findUnique({ where: { nickname } }); + if (!dup) break; + nickname = generateRandomKoreanName(); + } + // 그래도 중복이면 희귀 조합 한 번 더 시도 + const finalDup = await prisma.user.findUnique({ where: { nickname } }); + if (finalDup) { + nickname = generateRandomKoreanName(); + } user = await prisma.user.create({ data: { + userId, nickname, name, birth, @@ -247,6 +260,7 @@ async function upsertAdmin() { level: 200, }, create: { + userId: "admin", nickname: "admin", name: "Administrator", birth: new Date("1990-01-01"), diff --git a/src/app/admin/users/page.tsx b/src/app/admin/users/page.tsx index 2d99278..f153a72 100644 --- a/src/app/admin/users/page.tsx +++ b/src/app/admin/users/page.tsx @@ -47,6 +47,7 @@ export default function AdminUsersPage() { + @@ -90,6 +91,7 @@ function Row({ u, onChanged }: { u: any; onChanged: () => void }) { const allRoles = ["admin", "editor", "user"] as const; return ( + diff --git a/src/app/components/HorizontalCardScroller.tsx b/src/app/components/HorizontalCardScroller.tsx index b4ee86b..eb6f547 100644 --- a/src/app/components/HorizontalCardScroller.tsx +++ b/src/app/components/HorizontalCardScroller.tsx @@ -148,7 +148,7 @@ export default function HorizontalCardScroller({ items }: HorizontalCardScroller -
+
-
+
- 받는 사람: {receiverNickname || receiverId} + 받는 사람: {receiverNickname || "알 수 없음"}
ID 닉네임 이름 전화
{u.userId} {u.nickname} {u.name} {u.phone}