50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
// Server action to manually sync current user to database
|
|
"use server";
|
|
|
|
import { auth } from "@clerk/nextjs/server";
|
|
import { clerkClient } from "@clerk/nextjs/server";
|
|
import { prisma } from "@/lib/db/prisma";
|
|
|
|
export async function syncCurrentUser() {
|
|
try {
|
|
const { userId } = await auth();
|
|
|
|
if (!userId) {
|
|
return { success: false, error: "Not authenticated" };
|
|
}
|
|
|
|
// Get user details from Clerk
|
|
const clerk = await clerkClient();
|
|
const user = await clerk.users.getUser(userId);
|
|
|
|
// Create or update user in database
|
|
await prisma.user.upsert({
|
|
where: { clerkId: userId },
|
|
create: {
|
|
clerkId: userId,
|
|
email: user.emailAddresses[0]?.emailAddress || "",
|
|
firstName: user.firstName || null,
|
|
lastName: user.lastName || null,
|
|
imageUrl: user.imageUrl || null,
|
|
},
|
|
update: {
|
|
email: user.emailAddresses[0]?.emailAddress || "",
|
|
firstName: user.firstName || null,
|
|
lastName: user.lastName || null,
|
|
imageUrl: user.imageUrl || null,
|
|
},
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
message: `User ${user.emailAddresses[0]?.emailAddress} synced successfully!`,
|
|
};
|
|
} catch (error) {
|
|
console.error("Sync error:", error);
|
|
return {
|
|
success: false,
|
|
error: error instanceof Error ? error.message : "Unknown error",
|
|
};
|
|
}
|
|
}
|