Files
LexiChain/features/auth/api/user.action.ts
2026-03-28 23:46:45 +01:00

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",
};
}
}