Skip to content

Commit

Permalink
chore: add env schema validation
Browse files Browse the repository at this point in the history
  • Loading branch information
joannechen1223 committed Mar 16, 2024
1 parent 3f687c1 commit fd53009
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
2 changes: 2 additions & 0 deletions apps/recnet-api/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import { ConfigModule } from "@nestjs/config";
import { HealthModule } from "./modules/health/health.module";
import { UserModule } from "./modules/user/user.module";
import * as CommonConfigs from "./config/common.config";
import { parseEnv } from "./config/env.schema";

@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
validate: (env) => parseEnv(env),
load: [...Object.values(CommonConfigs)],
}),
HealthModule,
Expand Down
18 changes: 11 additions & 7 deletions apps/recnet-api/src/config/common.config.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import { registerAs } from "@nestjs/config";

import { parseEnv } from "./env.schema";

const parsedEnv = parseEnv(process.env);

export const DBConfig = registerAs("db", () => ({
host: process.env.RDS_HOSTNAME || "localhost",
port: parseInt(process.env.RDS_PORT, 10) || 5432,
database: process.env.RDS_DB_NAME,
username: process.env.RDS_USERNAME,
password: process.env.RDS_PASSWORD,
host: parsedEnv.RDS_HOSTNAME,
port: parsedEnv.RDS_PORT,
database: parsedEnv.RDS_DB_NAME,
username: parsedEnv.RDS_USERNAME,
password: parsedEnv.RDS_PASSWORD,
}));

export const PrismaConfig = registerAs("prisma", () => ({
schema: process.env.PRISMA_SCHEMA || "prisma/schema.prisma",
migrate: process.env.DB_MIGRATE === "true",
schema: parsedEnv.PRISMA_SCHEMA,
migrate: parsedEnv.DB_MIGRATE,
}));
22 changes: 22 additions & 0 deletions apps/recnet-api/src/config/env.schema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { z } from "zod";

const nodeEnv = z.enum(["development", "production", "local", "test"]);

export const EnvSchema = z.object({
PORT: z.coerce.number().optional().default(3000),
NODE_ENV: nodeEnv.default("development"),
// db config
RDS_HOSTNAME: z.string().optional().default("localhost"),
RDS_PORT: z.coerce.number().optional().default(5432),
RDS_DB_NAME: z.string(),
RDS_USERNAME: z.string(),
RDS_PASSWORD: z.string(),
// prisma config
PRISMA_SCHEMA: z.string().optional().default("prisma/schema.prisma"),
DB_MIGRATE: z.coerce.boolean().optional().default(false),
});

export const parseEnv = (env: Record<string, string>) => {
const parsedEnv = EnvSchema.parse(env);
return parsedEnv;
};

0 comments on commit fd53009

Please sign in to comment.