chore: configure angular and postgres foundation

This commit is contained in:
Bastian Wagner
2026-08-18 18:02:40 +02:00
parent 4a689238e6
commit 2903a0d670
11 changed files with 6314 additions and 1117 deletions

View File

@@ -13,18 +13,26 @@
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test": "jest --detectOpenHandles",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
"test:e2e": "jest --config ./test/jest-e2e.json",
"typeorm": "typeorm-ts-node-commonjs",
"seed": "ts-node src/database/seeds/seed.ts"
},
"dependencies": {
"@nestjs/common": "^11.0.1",
"@nestjs/core": "^11.0.1",
"@nestjs/platform-express": "^11.0.1",
"@nestjs/typeorm": "^11.0.3",
"class-transformer": "^0.5.1",
"class-validator": "^0.15.1",
"dotenv": "^17.4.2",
"pg": "^8.23.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1"
"rxjs": "^7.8.1",
"typeorm": "^1.1.0"
},
"devDependencies": {
"@eslint/eslintrc": "^3.2.0",

View File

@@ -1,9 +1,10 @@
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DatabaseModule } from './database/database.module';
@Module({
imports: [],
imports: [DatabaseModule],
controllers: [AppController],
providers: [AppService],
})

View File

@@ -0,0 +1,18 @@
import { createDatabaseConfig } from './database.config';
describe('createDatabaseConfig', () => {
it('uses postgres and permanently disables synchronization', () => {
expect(
createDatabaseConfig('postgresql://test:test@localhost/test'),
).toMatchObject({
type: 'postgres',
url: 'postgresql://test:test@localhost/test',
synchronize: false,
autoLoadEntities: true,
});
});
it('rejects an empty database URL', () => {
expect(() => createDatabaseConfig('')).toThrow('DATABASE_URL is required');
});
});

View File

@@ -0,0 +1,16 @@
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export function createDatabaseConfig(
databaseUrl: string,
): TypeOrmModuleOptions {
if (!databaseUrl.trim()) {
throw new Error('DATABASE_URL is required');
}
return {
type: 'postgres',
url: databaseUrl,
autoLoadEntities: true,
synchronize: false,
};
}

View File

@@ -0,0 +1,16 @@
import 'dotenv/config';
import { DataSource } from 'typeorm';
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl?.trim()) {
throw new Error('DATABASE_URL is required');
}
export const AppDataSource = new DataSource({
type: 'postgres',
url: databaseUrl,
entities: [__dirname + '/../**/*.entity.{ts,js}'],
migrations: [__dirname + '/migrations/*.{ts,js}'],
synchronize: false,
});

View File

@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { createDatabaseConfig } from '../config/database.config';
@Module({
imports: [
TypeOrmModule.forRootAsync({
useFactory: () => createDatabaseConfig(process.env.DATABASE_URL ?? ''),
}),
],
})
export class DatabaseModule {}