From b1f17d2f45ab5c5536e67254f4941e5dacccca7e Mon Sep 17 00:00:00 2001 From: saimeunt Date: Sat, 21 Dec 2024 01:29:34 +0100 Subject: [PATCH 1/3] WIP --- .env.local.example | 7 +- .gitignore | 3 + app/api/sign-up/route.ts | 34 ++ app/layout.tsx | 39 +- app/sign-in/[[...sign-in]]/page.tsx | 9 + app/sign-up/[[...sign-up]]/page.tsx | 9 + components/shared/NetworkToggle.tsx | 2 +- lib/actions/wallet.ts | 26 +- lib/bsvWallet/bsv-wallet.ts | 2 +- lib/prisma.ts | 7 + middleware.ts | 22 + package.json | 12 +- pnpm-lock.yaml | 377 +++++++++++++++++- .../migration.sql | 64 +++ prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 22 +- public/images/placeholder-user.jpg | Bin 0 -> 1635 bytes 17 files changed, 598 insertions(+), 40 deletions(-) create mode 100644 app/api/sign-up/route.ts create mode 100644 app/sign-in/[[...sign-in]]/page.tsx create mode 100644 app/sign-up/[[...sign-up]]/page.tsx create mode 100644 lib/prisma.ts create mode 100644 middleware.ts create mode 100644 prisma/migrations/20241221001726_update_user_table/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 public/images/placeholder-user.jpg diff --git a/.env.local.example b/.env.local.example index 472133d..090e9ed 100644 --- a/.env.local.example +++ b/.env.local.example @@ -83,4 +83,9 @@ POSTGRES_URL_NON_POOLING= POSTGRES_USER= POSTGRES_HOST= POSTGRES_PASSWORD= -POSTGRES_DATABASE= \ No newline at end of file +POSTGRES_DATABASE= + +NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="" +CLERK_SECRET_KEY="" +NEXT_PUBLIC_CLERK_SIGN_IN_URL="/sign-in" +NEXT_PUBLIC_CLERK_SIGN_UP_URL="/sign-up" diff --git a/.gitignore b/.gitignore index 7e1e047..641f359 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# prisma +prisma/generated diff --git a/app/api/sign-up/route.ts b/app/api/sign-up/route.ts new file mode 100644 index 0000000..5c9393a --- /dev/null +++ b/app/api/sign-up/route.ts @@ -0,0 +1,34 @@ +import { type NextRequest, NextResponse } from 'next/server'; +import { currentUser } from '@clerk/nextjs/server'; +import { prisma } from '@/lib/prisma'; + +export async function GET(request: NextRequest) { + const url = request.nextUrl.clone(); + url.pathname = '/'; + const user = await currentUser(); + if (!user) { + return NextResponse.redirect(url); + } + const prismaUser = await prisma.user.findUnique({ + where: { userId: user.id }, + }); + if (prismaUser) { + return NextResponse.redirect(url); + } + try { + await prisma.user.create({ + data: { + userId: user.id, + email: user.emailAddresses[0].emailAddress, + imageUrl: user.imageUrl, + password: 'defaultPassword', + role: 'user', + }, + }); + } catch (error) { + console.error(error); + } + return NextResponse.redirect(url); +} + +export const dynamic = 'force-dynamic'; diff --git a/app/layout.tsx b/app/layout.tsx index 99235fe..f02e819 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,5 +1,6 @@ import type { Metadata, Viewport } from 'next'; import { Inter as FontSans } from 'next/font/google'; +import { ClerkProvider } from '@clerk/nextjs'; import './globals.css'; import { cn } from '@/lib/utils'; import { ThemeProvider } from '@/components/theme-provider'; @@ -47,23 +48,25 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - - -
- {children} - -