fix: comprehensive TypeScript/build fixes and modernization

- Update tsconfig to ES2024 target and bundler moduleResolution
- Add dynamic imports for chart.js and recharts (bundle optimization)
- Consolidate 17 useState into useReducer in sessions page
- Fix 18 .js extension imports across lib files
- Add type declarations for @rapideditor/country-coder
- Fix platform user types (PlatformUserRole enum)
- Fix Calendar component prop types
- Centralize next-auth type augmentation
- Add force-dynamic to all API routes (prevent build-time prerender)
- Fix Prisma JSON null handling with Prisma.DbNull
- Fix various type mismatches (SessionMessage, ImportRecord, etc.)
- Export ButtonProps from button component
- Update next-themes import path
- Replace JSX.Element with React.ReactElement
- Remove obsolete debug scripts and pnpm lockfile
- Downgrade eslint to v8 for next compatibility
This commit is contained in:
2026-01-20 07:28:10 +01:00
parent 8b3846539f
commit 5bfd762e55
161 changed files with 14655 additions and 11682 deletions

View File

@@ -3,6 +3,8 @@ import { getServerSession } from "next-auth";
import { authOptions } from "../../../../lib/auth";
import { prisma } from "../../../../lib/prisma";
export const dynamic = "force-dynamic";
export async function GET(_request: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.user) {

View File

@@ -5,6 +5,8 @@ import { sessionMetrics } from "../../../../lib/metrics";
import { prisma } from "../../../../lib/prisma";
import type { ChatSession } from "../../../../lib/types";
export const dynamic = "force-dynamic";
interface SessionUser {
email: string;
name?: string;

View File

@@ -3,6 +3,8 @@ import { getServerSession } from "next-auth/next";
import { authOptions } from "../../../../lib/auth";
import { prisma } from "../../../../lib/prisma";
export const dynamic = "force-dynamic";
export async function GET(_request: NextRequest) {
const authSession = await getServerSession(authOptions);

View File

@@ -2,6 +2,8 @@ import { type NextRequest, NextResponse } from "next/server";
import { prisma } from "../../../../../lib/prisma";
import type { ChatSession } from "../../../../../lib/types";
export const dynamic = "force-dynamic";
export async function GET(
_request: NextRequest,
{ params }: { params: Promise<{ id: string }> }

View File

@@ -1,10 +1,12 @@
import type { Prisma } from "@prisma/client";
import type { Prisma, SessionCategory } from "@prisma/client";
import { type NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth/next";
import { authOptions } from "../../../../lib/auth";
import { prisma } from "../../../../lib/prisma";
import type { ChatSession } from "../../../../lib/types";
export const dynamic = "force-dynamic";
export async function GET(request: NextRequest) {
const authSession = await getServerSession(authOptions);
@@ -44,7 +46,7 @@ export async function GET(request: NextRequest) {
// Category Filter
if (category && category.trim() !== "") {
// Cast to SessionCategory enum if it's a valid value
whereClause.category = category;
whereClause.category = category as SessionCategory;
}
// Language Filter

View File

@@ -3,6 +3,8 @@ import { getServerSession } from "next-auth";
import { authOptions } from "../../../../lib/auth";
import { prisma } from "../../../../lib/prisma";
export const dynamic = "force-dynamic";
export async function POST(request: NextRequest) {
const session = await getServerSession(authOptions);
if (!session?.user || session.user.role !== "ADMIN") {

View File

@@ -5,6 +5,8 @@ import { getServerSession } from "next-auth";
import { authOptions } from "../../../../lib/auth";
import { prisma } from "../../../../lib/prisma";
export const dynamic = "force-dynamic";
interface UserBasicInfo {
id: string;
email: string;