chore: refacto NestJS in modules (#308)
* chore: wip refacto in modules * fix: rollback port * fix: jwt guard in wrong folder * chore: rename folder exception-filter in filters * fix: tests are running * fix: excessive stack depth comparing types * fix: auth issue * chore: move createUser in UserService * fix: test * fix: guards * fix: jwt guard don't handle falsy user
This commit is contained in:
35
server/src/health/health.controller.spec.ts
Normal file
35
server/src/health/health.controller.spec.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import { HealthCheckService, HttpHealthIndicator } from '@nestjs/terminus';
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { HealthController } from 'src/health/health.controller';
|
||||
import { PrismaHealthIndicator } from 'src/health/indicators/prisma-health-indicator';
|
||||
|
||||
describe('HealthController', () => {
|
||||
let healthController: HealthController;
|
||||
let testingModule: TestingModule;
|
||||
|
||||
beforeEach(async () => {
|
||||
testingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
HealthController,
|
||||
{
|
||||
provide: HealthCheckService,
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: PrismaHealthIndicator,
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: HttpHealthIndicator,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
healthController = testingModule.get<HealthController>(HealthController);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(healthController).toBeDefined();
|
||||
});
|
||||
});
|
||||
19
server/src/health/health.controller.ts
Normal file
19
server/src/health/health.controller.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { Controller, Get } from '@nestjs/common';
|
||||
import { HealthCheck, HealthCheckService } from '@nestjs/terminus';
|
||||
import { PrismaHealthIndicator } from 'src/health/indicators/prisma-health-indicator';
|
||||
|
||||
@Controller('healthz')
|
||||
export class HealthController {
|
||||
constructor(
|
||||
private health: HealthCheckService,
|
||||
private prismaHealthIndicator: PrismaHealthIndicator,
|
||||
) {}
|
||||
|
||||
@Get()
|
||||
@HealthCheck()
|
||||
check() {
|
||||
return this.health.check([
|
||||
() => this.prismaHealthIndicator.isDatabaseInstanceHealthy('database'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
11
server/src/health/health.module.ts
Normal file
11
server/src/health/health.module.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TerminusModule } from '@nestjs/terminus';
|
||||
import { HealthController } from 'src/health/health.controller';
|
||||
import { PrismaHealthIndicator } from 'src/health/indicators/prisma-health-indicator';
|
||||
|
||||
@Module({
|
||||
imports: [TerminusModule],
|
||||
controllers: [HealthController],
|
||||
providers: [PrismaHealthIndicator],
|
||||
})
|
||||
export class HealthModule {}
|
||||
23
server/src/health/indicators/prisma-health-indicator.ts
Normal file
23
server/src/health/indicators/prisma-health-indicator.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import {
|
||||
HealthCheckError,
|
||||
HealthIndicator,
|
||||
HealthIndicatorResult,
|
||||
} from '@nestjs/terminus';
|
||||
import { PrismaService } from 'src/database/prisma.service';
|
||||
|
||||
@Injectable()
|
||||
export class PrismaHealthIndicator extends HealthIndicator {
|
||||
constructor(private readonly prismaService: PrismaService) {
|
||||
super();
|
||||
}
|
||||
|
||||
async isDatabaseInstanceHealthy(key: string): Promise<HealthIndicatorResult> {
|
||||
try {
|
||||
await this.prismaService.$queryRaw`SELECT 1`;
|
||||
return this.getStatus(key, true);
|
||||
} catch (e) {
|
||||
throw new HealthCheckError('Prisma check failed', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user