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:
@@ -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({
|
||||
|
||||
@@ -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 */}
|
||||
|
||||
Reference in New Issue
Block a user