File size: 1,143 Bytes
6368531
 
 
 
 
 
 
ab4c789
 
 
 
 
 
 
 
 
 
 
 
 
a2aaef6
6368531
 
 
a2aaef6
 
 
 
 
6368531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { PrismaClient } from "@prisma/client";
import { env } from "@/config/env.js";

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined;
};

// For TiDB Cloud: add sslaccept=strict parameter
const databaseUrl = (() => {
  let url = env.DATABASE_URL;
  
  // Add ssl parameters if not present
  if (!url.includes("?")) {
    url += "?sslaccept=strict";
  } else if (!url.includes("sslaccept")) {
    url += "&sslaccept=strict";
  }
  
  return url;
})();

export const prisma =
  globalForPrisma.prisma ??
  new PrismaClient({
    datasources: {
      db: {
        url: databaseUrl,
      },
    },
    log: env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
  });

if (env.NODE_ENV !== "production") {
  globalForPrisma.prisma = prisma;
}

export async function connectDatabase(): Promise<void> {
  try {
    await prisma.$connect();
    console.log("Database connected successfully");
  } catch (error) {
    console.error("Database connection failed:", error);
    process.exit(1);
  }
}

export async function disconnectDatabase(): Promise<void> {
  await prisma.$disconnect();
}