import { User } from "@/lib/types" import { currentUser } from "@clerk/nextjs" import { redirect } from "next/navigation" import { generateUniqueUsername } from "@/lib/username-generator"; export default async function AppAuthLayout({ children, }: { children: React.ReactNode }) { const user = await currentUser() if (!user) { redirect("/") } const dbUser = await fetch( `${process.env.NEXT_PUBLIC_DATABASE_WORKER_URL}/api/user?id=${user.id}`, { headers: { Authorization: `${process.env.NEXT_PUBLIC_WORKERS_KEY}`, }, } ) const dbUserJSON = (await dbUser.json()) as User if (!dbUserJSON.id) { // Try to get GitHub username if available const githubUsername = user.externalAccounts.find( account => account.provider === "github" )?.username; const username = githubUsername || await generateUniqueUsername(async (username) => { // Check if username exists in database const userCheck = await fetch( `${process.env.NEXT_PUBLIC_DATABASE_WORKER_URL}/api/user/check-username?username=${username}`, { headers: { Authorization: `${process.env.NEXT_PUBLIC_WORKERS_KEY}`, }, } ) const exists = await userCheck.json() return exists.exists }); const res = await fetch( `${process.env.NEXT_PUBLIC_DATABASE_WORKER_URL}/api/user`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `${process.env.NEXT_PUBLIC_WORKERS_KEY}`, }, body: JSON.stringify({ id: user.id, name: user.firstName + " " + user.lastName, email: user.emailAddresses[0].emailAddress, username: username, avatarUrl: user.imageUrl || null, createdAt: new Date().toISOString(), }), } ) if (!res.ok) { const error = await res.text(); console.error("Failed to create user:", error); } else { const data = await res.json(); console.log("User created successfully:", data); } } return <>{children} }