diff --git a/.env.example b/.env.example index f3d8615..1e287c3 100644 --- a/.env.example +++ b/.env.example @@ -5,10 +5,6 @@ COOKIE_SECRET=same-serious-secret CORS_ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000 # --- POSTGRES --- -DB_USERNAME=admin -DB_PASSWORD=p@ssword123 -DB_DATABASE=task_tracker -DB_PORT=6000 DB_SCHEMA=base # ВАЖНО: @@ -24,6 +20,7 @@ DATABASE_URL=postgres://${DB_USERNAME}:${DB_PASSWORD}@localhost:${DB_PORT}/${DB_ # at development mode REDIS_HOST=127.0.0.1 REDIS_PORT=7000 +REDIS_PASSWORD=same-password JWT_AUDIENCE="task-tracker-client" diff --git a/libs/config/src/config.schema.ts b/libs/config/src/config.schema.ts index a957f35..0c6b30b 100644 --- a/libs/config/src/config.schema.ts +++ b/libs/config/src/config.schema.ts @@ -9,13 +9,11 @@ export const ConfigSchema = z.object({ PORT: z.coerce.number().default(3000), NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), COOKIE_SECRET: z.string({ error: 'COOKIE_SECRET is missing' }), - DB_USERNAME: z.string({ error: 'DB_USERNAME is missing' }), - DB_PASSWORD: z.string({ error: 'DB_PASSWORD is missing' }), - DB_DATABASE: z.string({ error: 'DB_DATABASE is missing' }), DB_SCHEMA: z.string({ error: 'DB_SCHEMA is missing' }), - DATABASE_URL: z.string().url('DATABASE_URL must be a valid connection string'), + DATABASE_URL: z.string().nonempty('DATABASE_URL must be a valid connection string'), REDIS_HOST: z.string().default('redis'), REDIS_PORT: z.coerce.number().optional().default(6379), + REDIS_PASSWORD: z.string().optional(), DOMAIN: z .string() .toLowerCase() diff --git a/src/modules/app/app.module.ts b/src/modules/app/app.module.ts index 5ca84f4..7d796ef 100644 --- a/src/modules/app/app.module.ts +++ b/src/modules/app/app.module.ts @@ -45,6 +45,7 @@ import { ProjectsModule } from '../projects'; inject: [ConfigService], useFactory: (cfg: ConfigService) => ({ connection: { + password: cfg.get('REDIS_PASSWORD'), host: cfg.getOrThrow('REDIS_HOST'), port: cfg.get('REDIS_PORT'), }, diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts index cee1cd7..1ea71d4 100644 --- a/src/modules/auth/auth.module.ts +++ b/src/modules/auth/auth.module.ts @@ -44,12 +44,14 @@ const REPOSITORY = { useFactory: async (cfg: ConfigService) => { const host = cfg.getOrThrow('REDIS_HOST', { infer: true }); const port = cfg.get('REDIS_PORT'); + const password = cfg.get('REDIS_PASSWORD'); const url = `redis://${host}${port ? `:${port}` : ''}`; return { type: 'single', url, options: { + password, retryStrategy(times) { return Math.min(times * 50, 2000); }, diff --git a/src/modules/teams/teams.module.ts b/src/modules/teams/teams.module.ts index 75a0e4a..708f2b6 100644 --- a/src/modules/teams/teams.module.ts +++ b/src/modules/teams/teams.module.ts @@ -33,12 +33,14 @@ const REPOSITORY = { provide: 'ITeamsRepository', useClass: TeamsRepository }; useFactory: async (cfg: ConfigService) => { const host = cfg.getOrThrow('REDIS_HOST', { infer: true }); const port = cfg.get('REDIS_PORT'); + const password = cfg.get('REDIS_PASSWORD'); const url = `redis://${host}${port ? `:${port}` : ''}`; return { type: 'single', url, options: { + password, retryStrategy(times) { return Math.min(times * 50, 2000); },