From ebc0c61da4d629a02c7af46008f80fe441bbf990 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 12 Mar 2026 19:47:28 -0500 Subject: [PATCH] routes fix --- src/app/api/admin/settings/route.ts | 2 +- src/app/api/auth/[...nextauth]/route.ts | 47 +----------------------- src/app/api/reports/[id]/export/route.ts | 2 +- src/app/api/reports/[id]/route.ts | 2 +- src/app/api/reports/route.ts | 2 +- src/app/api/tasks/route.ts | 2 +- src/lib/auth.ts | 44 ++++++++++++++++++++++ 7 files changed, 51 insertions(+), 50 deletions(-) create mode 100644 src/lib/auth.ts diff --git a/src/app/api/admin/settings/route.ts b/src/app/api/admin/settings/route.ts index 56d99ee..a5aaa8e 100644 --- a/src/app/api/admin/settings/route.ts +++ b/src/app/api/admin/settings/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; -import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { authOptions } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; // GET /api/admin/settings - Fetch global settings diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts index 6f15df9..7b38c1b 100644 --- a/src/app/api/auth/[...nextauth]/route.ts +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -1,48 +1,5 @@ -import NextAuth, { NextAuthOptions } from "next-auth"; -import GoogleProvider from "next-auth/providers/google"; -import { PrismaAdapter } from "@next-auth/prisma-adapter"; -import { prisma } from "@/lib/prisma"; - -export const authOptions: NextAuthOptions = { - adapter: PrismaAdapter(prisma), - providers: [ - GoogleProvider({ - clientId: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, - }), - ], - callbacks: { - async jwt({ token, account }) { - if (account) { - token.accessToken = account.access_token; - } - return token; - }, - async session({ session, user, token }) { - if (session.user) { - session.user.id = user?.id || (token?.sub as string); - // Fetch fresh role from DB if needed, or use token - const dbUser = await prisma.user.findUnique({ where: { id: session.user.id } }); - session.user.role = dbUser?.role || 'EMPLOYEE'; - } - return session; - }, - }, - events: { - async createUser({ user }) { - const userCount = await prisma.user.count(); - if (userCount === 1) { - await prisma.user.update({ - where: { id: user.id }, - data: { role: 'ADMIN' }, - }); - } - }, - }, - pages: { - signIn: "/auth/signin", - }, -}; +import NextAuth from "next-auth"; +import { authOptions } from "@/lib/auth"; const handler = NextAuth(authOptions); diff --git a/src/app/api/reports/[id]/export/route.ts b/src/app/api/reports/[id]/export/route.ts index d2dfd98..6d5c332 100644 --- a/src/app/api/reports/[id]/export/route.ts +++ b/src/app/api/reports/[id]/export/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; -import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { authOptions } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { uploadToDrive, generateReportMarkdown } from "@/lib/google-drive"; import { getToken } from "next-auth/jwt"; diff --git a/src/app/api/reports/[id]/route.ts b/src/app/api/reports/[id]/route.ts index 5d3e08e..d5ea3c2 100644 --- a/src/app/api/reports/[id]/route.ts +++ b/src/app/api/reports/[id]/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; -import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { authOptions } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; // PATCH /api/reports/[id] - Update report status or manager diff --git a/src/app/api/reports/route.ts b/src/app/api/reports/route.ts index a18c839..5f669e9 100644 --- a/src/app/api/reports/route.ts +++ b/src/app/api/reports/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; -import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { authOptions } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; // GET /api/reports - Fetch reports for the logged-in user (or all for admin) diff --git a/src/app/api/tasks/route.ts b/src/app/api/tasks/route.ts index 0e1a70c..b13950d 100644 --- a/src/app/api/tasks/route.ts +++ b/src/app/api/tasks/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; -import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { authOptions } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; // POST /api/tasks - Add a task to a report diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 0000000..d1bf329 --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,44 @@ +import { NextAuthOptions } from "next-auth"; +import GoogleProvider from "next-auth/providers/google"; +import { PrismaAdapter } from "@next-auth/prisma-adapter"; +import { prisma } from "@/lib/prisma"; + +export const authOptions: NextAuthOptions = { + adapter: PrismaAdapter(prisma), + providers: [ + GoogleProvider({ + clientId: process.env.GOOGLE_CLIENT_ID!, + clientSecret: process.env.GOOGLE_CLIENT_SECRET!, + }), + ], + callbacks: { + async jwt({ token, account }) { + if (account) { + token.accessToken = account.access_token; + } + return token; + }, + async session({ session, user, token }) { + if (session?.user) { + session.user.id = user?.id || (token?.sub as string); + const dbUser = await prisma.user.findUnique({ where: { id: session.user.id } }); + session.user.role = dbUser?.role || 'EMPLOYEE'; + } + return session; + }, + }, + events: { + async createUser({ user }) { + const userCount = await prisma.user.count(); + if (userCount === 1) { + await prisma.user.update({ + where: { id: user.id }, + data: { role: 'ADMIN' }, + }); + } + }, + }, + pages: { + signIn: "/auth/signin", + }, +};