Skip to content

Commit

Permalink
jake shenanigans to get middleware up and user created
Browse files Browse the repository at this point in the history
  • Loading branch information
parth-agrawal committed Jul 1, 2024
1 parent aecb723 commit 65a56a0
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 8 deletions.
7 changes: 7 additions & 0 deletions global.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { User } from "@prisma/client";

declare module "next" {
interface NextApiRequest {
user?: User;
}
}
39 changes: 39 additions & 0 deletions prisma/load.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import prisma from "./client";

async function createArtEntries() {
try {
await prisma.art.create({
data: {
boxCount: 5,
Author: {
create: {
email: "[email protected]",
name: "test",
ClerkId: "test"
}
}
}
});

await prisma.art.create({
data: {
boxCount: 10,
Author: {
create: {
email: "[email protected]",
name: "test2",
ClerkId: "test2"
}
}
}
});

console.log("Art entries created successfully");
} catch (error) {
console.error("Error creating art entries:", error);
} finally {
await prisma.$disconnect();
}
}

export default createArtEntries;
16 changes: 16 additions & 0 deletions src/app/api/sign-up-callback/route.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { useAuth } from "@clerk/nextjs";
import { auth, currentUser } from "@clerk/nextjs/server";
import { useEffect } from "react";
import prisma from "../../../../prisma/client";
import { NextApiHandler } from "next";
import { optionalUser } from "@/middleware/optionalUser";
import { redirect } from "next/navigation";



export const GET = optionalUser(async (req, res) => {
console.log(req.user)
return (
redirect("/")
);
})
23 changes: 23 additions & 0 deletions src/app/feed/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import prisma from "../../../prisma/client";
import { ArtInterpreter } from "../ArtInterpreter";

export const FeedScreen = () => {



return (
<div>
Feed:
{prisma.art.findMany().then((arts) => {
return arts.map((art) => {
return (
<ArtInterpreter key={art.id} boxCount={art.boxCount} />
);
});
})}

</div>
);
};

export default FeedScreen;
4 changes: 2 additions & 2 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { ClerkProvider } from "@clerk/nextjs";
const inter = Inter({ subsets: ["latin"] });

export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
title: "Generative Art Feed",
description: "Generated by you!",
};

export default function RootLayout({
Expand Down
18 changes: 14 additions & 4 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,27 @@ import Image from "next/image";
import { ArtInterpreter } from "./ArtInterpreter";
import { ClerkProvider } from "@clerk/nextjs";
import { SignInButton, SignOutButton, SignedIn, SignedOut } from "@clerk/clerk-react";
import { useState } from "react";

export default function Home() {



return (
<>

<div className="h-screen flex justify-center items-center">
<div className="h-screen flex flex-col justify-center items-center">

gang gang!


<SignedOut >
You need to sign in
<SignInButton>Sign in boiii</SignInButton>
<div>

You need to sign in
</div>
<SignInButton forceRedirectUrl={"/api/sign-up-callback"}>
Sign in boiii
</SignInButton>
</SignedOut>

<SignedIn>
Expand Down
6 changes: 4 additions & 2 deletions src/app/middleware.ts → src/middleware.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { clerkMiddleware } from "@clerk/nextjs/server";
import { clerkMiddleware, currentUser } from "@clerk/nextjs/server";
import prisma from "../prisma/client";

export default clerkMiddleware();

export const config = {
matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"],
};
};

47 changes: 47 additions & 0 deletions src/middleware/optionalUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { useAuth } from "@clerk/nextjs";
import { auth, currentUser } from "@clerk/nextjs/server";
import { useEffect } from "react";
import { NextApiHandler } from "next";
import prisma from "../../prisma/client";





export function optionalUser(handler: NextApiHandler): NextApiHandler {
return async (req, res) => {
const clerkId = auth().userId;

if (!clerkId) {
return handler(req, res)
}
else {
const user = await prisma.user.findUnique({
where: {
ClerkId: clerkId
}

})

if (user) {
// append user to request context
req.user = user;
} else {
const curr = await currentUser();

// otherwise create a new user and append to request context
req.user = await prisma.user.create({
data: {
ClerkId: clerkId,
email: curr?.emailAddresses[0].emailAddress || "",
name: curr?.username
}
})

}
}

return handler(req, res)

}
}

0 comments on commit 65a56a0

Please sign in to comment.