diff --git a/prisma/migrations/20260506100000_add_user_comment/migration.sql b/prisma/migrations/20260506100000_add_user_comment/migration.sql new file mode 100644 index 0000000..42a54c4 --- /dev/null +++ b/prisma/migrations/20260506100000_add_user_comment/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "comment" TEXT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6287836..55f35cd 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -23,6 +23,7 @@ model User { banned Boolean? @default(false) banReason String? banExpires DateTime? + comment String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app/admin/users/[userId]/actions.ts b/src/app/admin/users/[userId]/actions.ts index 09f0f92..994a182 100644 --- a/src/app/admin/users/[userId]/actions.ts +++ b/src/app/admin/users/[userId]/actions.ts @@ -43,7 +43,7 @@ export async function bulkGrantAccess( export async function updateUserContact( userId: string, - data: { name: string; email: string; phone: string; birthday: string } + data: { name: string; email: string; phone: string; birthday: string; comment: string } ) { await requireAdmin(); await prisma.user.update({ @@ -53,6 +53,7 @@ export async function updateUserContact( email: data.email.trim() || undefined, phone: data.phone.trim() || null, birthday: data.birthday ? new Date(data.birthday) : null, + comment: data.comment.trim() || null, }, }); revalidatePath(`/admin/users/${userId}`); diff --git a/src/app/admin/users/[userId]/page.tsx b/src/app/admin/users/[userId]/page.tsx index 8ec3ede..3005d9a 100644 --- a/src/app/admin/users/[userId]/page.tsx +++ b/src/app/admin/users/[userId]/page.tsx @@ -68,6 +68,7 @@ export default async function UserPage({ params }: Props) { email={user.email} phone={user.phone ?? null} birthday={user.birthday ?? null} + comment={user.comment ?? null} /> diff --git a/src/components/admin/user-contact-editor.tsx b/src/components/admin/user-contact-editor.tsx index 8764622..f86c5f8 100644 --- a/src/components/admin/user-contact-editor.tsx +++ b/src/components/admin/user-contact-editor.tsx @@ -14,8 +14,10 @@ const inputStyle = { } as React.CSSProperties; const focusHandlers = { - onFocus: (e: React.FocusEvent) => (e.currentTarget.style.borderColor = "var(--foreground)"), - onBlur: (e: React.FocusEvent) => (e.currentTarget.style.borderColor = "var(--border)"), + onFocus: (e: React.FocusEvent) => + (e.currentTarget.style.borderColor = "var(--foreground)"), + onBlur: (e: React.FocusEvent) => + (e.currentTarget.style.borderColor = "var(--border)"), }; interface Props { @@ -24,9 +26,10 @@ interface Props { email: string; phone: string | null; birthday: Date | null; + comment: string | null; } -export function UserContactEditor({ userId, name, email, phone, birthday }: Props) { +export function UserContactEditor({ userId, name, email, phone, birthday, comment }: Props) { const [editing, setEditing] = useState(false); const [nameVal, setNameVal] = useState(name); const [emailVal, setEmailVal] = useState(email); @@ -34,42 +37,59 @@ export function UserContactEditor({ userId, name, email, phone, birthday }: Prop const [birthdayVal, setBirthdayVal] = useState( birthday ? birthday.toISOString().slice(0, 10) : "" ); + const [commentVal, setCommentVal] = useState(comment ?? ""); const [pending, startTransition] = useTransition(); function handleSave() { startTransition(async () => { - await updateUserContact(userId, { name: nameVal, email: emailVal, phone: phoneVal, birthday: birthdayVal }); + await updateUserContact(userId, { + name: nameVal, + email: emailVal, + phone: phoneVal, + birthday: birthdayVal, + comment: commentVal, + }); setEditing(false); }); } if (!editing) { return ( -
-
-

- Телефон -

-

{phone || "—"}

+
+
+
+

+ Телефон +

+

{phone || "—"}

+
+
+

+ День рождения +

+

+ {birthday + ? new Date(birthday).toLocaleDateString("ru-RU", { day: "numeric", month: "long", year: "numeric" }) + : "—"} +

+
+
-
-

- День рождения -

-

- {birthday - ? new Date(birthday).toLocaleDateString("ru-RU", { day: "numeric", month: "long", year: "numeric" }) - : "—"} -

-
- + {comment && ( +
+

+ Комментарий +

+

{comment}

+
+ )}
); } @@ -127,6 +147,20 @@ export function UserContactEditor({ userId, name, email, phone, birthday }: Prop />
+
+ +