// db.ts
import { withReplicas } from "drizzle-orm/mysql-core";
import { drizzle } from "drizzle-orm/mysql2";
import { serverEnv } from "@/env/server";
import config from "./config";
import * as relations from "./relations";
import * as schema from "./schema";
const DRIZZLE_CONFIG = {
schema: {
...schema,
...relations,
},
mode: "default" as const,
casing: "snake_case" as const,
} as const;
const primaryDb = drizzle({
...DRIZZLE_CONFIG,
connection: { uri: config.primary },
});
const replicaDbs =
config.read.length > 0
? config.read.map((url) =>
drizzle({
...DRIZZLE_CONFIG,
connection: { uri: url },
}),
)
: [primaryDb];
const drizzleDb = withReplicas(
primaryDb,
replicaDbs as [typeof primaryDb, ...(typeof primaryDb)[]],
);
declare const global: {
drizzleGlobal: typeof drizzleDb;
};
const db = global.drizzleGlobal ?? drizzleDb;
export { db, primaryDb, replicaDbs };
export type TransactionType = Parameters<
Parameters<typeof db.transaction>[0]
>[0];
if (serverEnv.NODE_ENV !== "production") global.drizzleGlobal = db;
// db.ts
import { withReplicas } from "drizzle-orm/mysql-core";
import { drizzle } from "drizzle-orm/mysql2";
import { serverEnv } from "@/env/server";
import config from "./config";
import * as relations from "./relations";
import * as schema from "./schema";
const DRIZZLE_CONFIG = {
schema: {
...schema,
...relations,
},
mode: "default" as const,
casing: "snake_case" as const,
} as const;
const primaryDb = drizzle({
...DRIZZLE_CONFIG,
connection: { uri: config.primary },
});
const replicaDbs =
config.read.length > 0
? config.read.map((url) =>
drizzle({
...DRIZZLE_CONFIG,
connection: { uri: url },
}),
)
: [primaryDb];
const drizzleDb = withReplicas(
primaryDb,
replicaDbs as [typeof primaryDb, ...(typeof primaryDb)[]],
);
declare const global: {
drizzleGlobal: typeof drizzleDb;
};
const db = global.drizzleGlobal ?? drizzleDb;
export { db, primaryDb, replicaDbs };
export type TransactionType = Parameters<
Parameters<typeof db.transaction>[0]
>[0];
if (serverEnv.NODE_ENV !== "production") global.drizzleGlobal = db;