feat(01-01): NestJS API with health endpoint and Prisma schema

- NestJS app with ConfigModule and HealthModule
- GET /health endpoint returning {status, timestamp} using HealthResponse type
- Prisma schema with PostgreSQL datasource and Tenant model (multi-tenancy foundation)
- Multi-stage Dockerfile with non-root nestjs user, monorepo root as build context
- Workspace dependency on @tessera/shared for shared types
- Type-check passes successfully
This commit is contained in:
2026-06-18 10:04:08 +02:00
parent b75d7c3b58
commit 04c78b4bdc
10 changed files with 3195 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { HealthModule } from './health/health.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
HealthModule,
],
})
export class AppModule {}
+13
View File
@@ -0,0 +1,13 @@
import { Controller, Get } from '@nestjs/common';
import type { HealthResponse } from '@tessera/shared';
@Controller('health')
export class HealthController {
@Get()
check(): HealthResponse {
return {
status: 'ok',
timestamp: new Date().toISOString(),
};
}
}
+7
View File
@@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { HealthController } from './health.controller';
@Module({
controllers: [HealthController],
})
export class HealthModule {}
+13
View File
@@ -0,0 +1,13 @@
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors({ origin: true });
await app.listen(3001);
console.log('Tessera API running on port 3001');
}
bootstrap();