summaryrefslogtreecommitdiff
path: root/packages/db
diff options
context:
space:
mode:
authortranminhquang <tranminhquang4421@gmail.com>2025-07-15 13:29:16 +0700
committertranminhquang <tranminhquang4421@gmail.com>2025-07-15 13:29:16 +0700
commit9d5fb821c75dd2f0c0d3da6fb427db966d3c7358 (patch)
tree96ebbdd997f69a57aa0ab6390966ab784bd135be /packages/db
parent55978c30fa8629840995922e76a98ad4b2045b80 (diff)
downloadopencut-9d5fb821c75dd2f0c0d3da6fb427db966d3c7358.tar.gz
feat: integrate @t3-oss/env for environment variable management across the application
Diffstat (limited to 'packages/db')
-rw-r--r--packages/db/drizzle.config.ts15
-rw-r--r--packages/db/package.json7
-rw-r--r--packages/db/src/index.ts8
-rw-r--r--packages/db/src/keys.ts19
4 files changed, 34 insertions, 15 deletions
diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts
index b003e31a..d661c455 100644
--- a/packages/db/drizzle.config.ts
+++ b/packages/db/drizzle.config.ts
@@ -1,17 +1,16 @@
import type { Config } from "drizzle-kit";
import * as dotenv from "dotenv";
+import { keys } from "./src/keys";
+
+const { NODE_ENV, DATABASE_URL } = keys();
// Load the right env file based on environment
-if (process.env.NODE_ENV === "production") {
+if (NODE_ENV === "production") {
dotenv.config({ path: ".env.production" });
} else {
dotenv.config({ path: ".env.local" });
}
-if (!process.env.DATABASE_URL) {
- throw new Error("DATABASE_URL is not set");
-}
-
export default {
schema: "./src/schema.ts",
dialect: "postgresql",
@@ -19,8 +18,8 @@ export default {
table: "drizzle_migrations",
},
dbCredentials: {
- url: process.env.DATABASE_URL,
+ url: DATABASE_URL,
},
out: "./migrations",
- strict: process.env.NODE_ENV === "production",
-} satisfies Config; \ No newline at end of file
+ strict: NODE_ENV === "production",
+} satisfies Config;
diff --git a/packages/db/package.json b/packages/db/package.json
index 94990dc9..aebbbc90 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -7,7 +7,8 @@
"exports": {
".": "./src/index.ts",
"./schema": "./src/schema.ts",
- "./drizzle.config": "./drizzle.config.ts"
+ "./drizzle.config": "./drizzle.config.ts",
+ "./keys": "./src/keys.ts"
},
"scripts": {
"db:generate": "drizzle-kit generate",
@@ -16,8 +17,10 @@
"db:studio": "drizzle-kit studio"
},
"dependencies": {
+ "@t3-oss/env-nextjs": "^0.13.8",
"drizzle-orm": "^0.44.2",
- "postgres": "^3.4.5"
+ "postgres": "^3.4.5",
+ "zod": "^4.0.5"
},
"devDependencies": {
"drizzle-kit": "^0.31.1",
diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts
index b480f566..9b395ab6 100644
--- a/packages/db/src/index.ts
+++ b/packages/db/src/index.ts
@@ -1,17 +1,15 @@
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "./schema";
+import { keys } from "./keys";
+const { DATABASE_URL } = keys();
// Create a lazy database instance that only initializes when accessed
let _db: ReturnType<typeof drizzle> | null = null;
function getDb() {
- if (!process.env.DATABASE_URL) {
- throw new Error("DATABASE_URL is not set");
- }
-
if (!_db) {
- const client = postgres(process.env.DATABASE_URL);
+ const client = postgres(DATABASE_URL);
_db = drizzle(client, { schema });
}
diff --git a/packages/db/src/keys.ts b/packages/db/src/keys.ts
new file mode 100644
index 00000000..65983416
--- /dev/null
+++ b/packages/db/src/keys.ts
@@ -0,0 +1,19 @@
+import { createEnv } from "@t3-oss/env-nextjs";
+import { z } from "zod";
+
+export const keys = () =>
+ createEnv({
+ server: {
+ NODE_ENV: z
+ .enum(["development", "production", "test"])
+ .default("development"),
+ DATABASE_URL: z
+ .string()
+ .startsWith("postgres://")
+ .or(z.string().startsWith("postgresql://")),
+ },
+ runtimeEnv: {
+ NODE_ENV: process.env.NODE_ENV,
+ DATABASE_URL: process.env.DATABASE_URL,
+ },
+ });