Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions app/backend/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ DB_USER=postgres
DB_PASS=postgres
DB_NAME=gatherraa

# Connection pool tuning (defaults are conservative; tune for your workload)
DATABASE_POOL_MIN=2 # Minimum idle connections
DATABASE_POOL_MAX=10 # Maximum pool size
IDLE_TIMEOUT_MS=30000 # Close idle connections after this many ms
STATEMENT_TIMEOUT_MS=5000 # Connection acquisition timeout in ms
MAX_LIFETIME_MS=3600000 # Max connection lifetime in ms (1 hour)

# ── Redis ────────────────────────────────────────────────────────────────────
REDIS_URL=redis://localhost:6379
REDIS_HOST=localhost
Expand Down
25 changes: 18 additions & 7 deletions app/backend/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ScheduleModule } from '@nestjs/schedule';
import { TypeOrmModule } from '@nestjs/typeorm';

Expand All @@ -16,12 +16,23 @@ import { VerificationHistory } from './identity-verification/entities/verificati
ConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRoot({
type: 'sqlite',
database: ':memory:',
entities: [IdentityVerification, VerificationHistory],
synchronize: true,
retryAttempts: 0,
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
type: 'sqlite',
database: config.get<string>('DATABASE_PATH', ':memory:'),
entities: [IdentityVerification, VerificationHistory],
synchronize: true,
retryAttempts: 0,
// Pool sizing — defaults are conservative but tunable via env
extra: {
min: config.get<number>('DATABASE_POOL_MIN', 2),
max: config.get<number>('DATABASE_POOL_MAX', 10),
idleTimeoutMillis: config.get<number>('IDLE_TIMEOUT_MS', 30_000),
connectionTimeoutMillis: config.get<number>('STATEMENT_TIMEOUT_MS', 5_000),
maxLifetimeSeconds: config.get<number>('MAX_LIFETIME_MS', 3_600_000) / 1000,
},
}),
}),
ScheduleModule.forRoot(),
IdentityVerificationModule,
Expand Down
Loading