1+ import { PrismaPg } from "@prisma/adapter-pg" ;
12import { PrismaClient } from "@prisma/client" ;
23import dotenv from "dotenv" ;
34import dotenvExpand from "dotenv-expand" ;
45import { Singleton } from "tstl" ;
56import typia from "typia" ;
67
8+ interface IEnvironments {
9+ MODE : "local" | "dev" | "real" ;
10+ API_PORT : `${number } `;
11+ SYSTEM_PASSWORD : string ;
12+
13+ POSTGRES_URL : string ;
14+ POSTGRES_HOST : string ;
15+ POSTGRES_PORT : `${number } `;
16+ POSTGRES_DATABASE : string ;
17+ POSTGRES_SCHEMA : string ;
18+ POSTGRES_USERNAME : string ;
19+ POSTGRES_USERNAME_READONLY : string ;
20+ POSTGRES_PASSWORD : string ;
21+ }
22+ const envSingleton = new Singleton ( ( ) => {
23+ const env = dotenv . config ( ) ;
24+ dotenvExpand . expand ( env ) ;
25+ return typia . assert < IEnvironments > ( process . env ) ;
26+ } ) ;
27+ const prismaSingleton = new Singleton (
28+ ( ) =>
29+ new PrismaClient ( {
30+ adapter : new PrismaPg (
31+ { connectionString : envSingleton . get ( ) . POSTGRES_URL } ,
32+ { schema : envSingleton . get ( ) . POSTGRES_SCHEMA } ,
33+ ) ,
34+ } ) ,
35+ ) ;
36+
737/**
838 * Global variables of the server.
939 *
@@ -12,10 +42,11 @@ import typia from "typia";
1242export class MyGlobal {
1343 public static testing : boolean = false ;
1444
15- public static readonly prisma : PrismaClient = new PrismaClient ( ) ;
16-
45+ public static get prisma ( ) : PrismaClient {
46+ return prismaSingleton . get ( ) ;
47+ }
1748 public static get env ( ) : IEnvironments {
18- return environments . get ( ) ;
49+ return envSingleton . get ( ) ;
1950 }
2051
2152 /**
@@ -26,7 +57,7 @@ export class MyGlobal {
2657 * - real: The server is for the real service.
2758 */
2859 public static get mode ( ) : "local" | "dev" | "real" {
29- return ( modeWrapper . value ??= environments . get ( ) . MODE ) ;
60+ return ( modeWrapper . value ??= envSingleton . get ( ) . MODE ) ;
3061 }
3162
3263 /**
@@ -39,28 +70,8 @@ export class MyGlobal {
3970 modeWrapper . value = mode ;
4071 }
4172}
42- interface IEnvironments {
43- MODE : "local" | "dev" | "real" ;
44- API_PORT : `${number } `;
45- SYSTEM_PASSWORD : string ;
46-
47- POSTGRES_HOST : string ;
48- POSTGRES_PORT : `${number } `;
49- POSTGRES_DATABASE : string ;
50- POSTGRES_SCHEMA : string ;
51- POSTGRES_USERNAME : string ;
52- POSTGRES_USERNAME_READONLY : string ;
53- POSTGRES_PASSWORD : string ;
54- }
5573
5674interface IMode {
5775 value ?: "local" | "dev" | "real" ;
5876}
59-
6077const modeWrapper : IMode = { } ;
61-
62- const environments = new Singleton ( ( ) => {
63- const env = dotenv . config ( ) ;
64- dotenvExpand . expand ( env ) ;
65- return typia . assert < IEnvironments > ( process . env ) ;
66- } ) ;
0 commit comments