Add phone and birthday fields to User model with admin editor

- Add phone/birthday columns via Prisma migration
- Admin user page shows phone and birthday with inline edit UI
- UserContactEditor client component for editing contact info
- updateUserContact server action with admin-only guard

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-27 16:43:35 +05:00
parent c64f393a7b
commit fdb9f96382
5 changed files with 149 additions and 1 deletions
+15
View File
@@ -41,6 +41,21 @@ export async function bulkGrantAccess(
revalidatePath(`/admin/users/${userId}`);
}
export async function updateUserContact(
userId: string,
data: { phone: string; birthday: string }
) {
await requireAdmin();
await prisma.user.update({
where: { id: userId },
data: {
phone: data.phone.trim() || null,
birthday: data.birthday ? new Date(data.birthday) : null,
},
});
revalidatePath(`/admin/users/${userId}`);
}
export async function revokeUserAccess(userId: string, courseId: string) {
const session = await requireAdmin();
await prisma.courseEnrollment.delete({
+9 -1
View File
@@ -2,6 +2,7 @@ import { prisma } from "@/lib/prisma";
import { notFound } from "next/navigation";
import Link from "next/link";
import { UserEnrollmentManager } from "@/components/admin/user-enrollment-manager";
import { UserContactEditor } from "@/components/admin/user-contact-editor";
interface Props {
params: Promise<{ userId: string }>;
@@ -47,7 +48,7 @@ export default async function UserPage({ params }: Props) {
</nav>
{/* User info */}
<section className="card-aubade p-6 mb-6">
<section className="card-aubade p-6 mb-6 space-y-4">
<div className="flex items-start justify-between">
<div>
<h1 className="text-xl font-bold">{user.name}</h1>
@@ -60,6 +61,13 @@ export default async function UserPage({ params }: Props) {
</span>
</div>
</div>
<div style={{ borderTop: "2px solid var(--border)", paddingTop: "1rem" }}>
<UserContactEditor
userId={userId}
phone={user.phone ?? null}
birthday={user.birthday ?? null}
/>
</div>
</section>
{/* Enrollments + bulk grant */}