import { User } from "@/lib/types" import { generateUniqueUsername } from "@/lib/username-generator" import { currentUser } from "@clerk/nextjs" import { redirect } from "next/navigation" 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} }