feat(server): runtime service config (#7644)

This commit is contained in:
liuyi
2024-07-30 14:58:24 +08:00
committed by GitHub
parent 67248316bd
commit fcf0ecbaa2
8 changed files with 136 additions and 10 deletions
@@ -0,0 +1,17 @@
import type { Prisma } from '@prisma/client';
import { defineStartupConfig, ModuleConfig } from '../config';
interface PrismaStartupConfiguration extends Prisma.PrismaClientOptions {
datasourceUrl: string;
}
declare module '../config' {
interface AppConfig {
database: ModuleConfig<PrismaStartupConfiguration>;
}
}
defineStartupConfig('database', {
datasourceUrl: '',
});
@@ -1,18 +1,22 @@
import './config';
import { Global, Module, Provider } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { Config } from '../config';
import { PrismaService } from './service';
// only `PrismaClient` can be injected
const clientProvider: Provider = {
provide: PrismaClient,
useFactory: () => {
useFactory: (config: Config) => {
if (PrismaService.INSTANCE) {
return PrismaService.INSTANCE;
}
return new PrismaService();
return new PrismaService(config.database);
},
inject: [Config],
};
@Global()
@@ -1,6 +1,6 @@
import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { Prisma, PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService
@@ -9,8 +9,8 @@ export class PrismaService
{
static INSTANCE: PrismaService | null = null;
constructor() {
super();
constructor(opts: Prisma.PrismaClientOptions) {
super(opts);
PrismaService.INSTANCE = this;
}