All files / src/config index.js

84.21% Statements 16/19
64% Branches 16/25
100% Functions 3/3
83.33% Lines 15/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 537x   7x   7x 21x 21x     7x 7x                   7x   7x       7x     7x                             7x 14x   7x       7x  
const dotenv = require('dotenv');
 
dotenv.config();
 
const optionalNumber = (value, fallback) => {
  const parsed = parseInt(value, 10);
  return Number.isFinite(parsed) ? parsed : fallback;
};
 
const deriveDatabaseUrl = () => {
  Iif (process.env.DATABASE_URL) {
    return process.env.DATABASE_URL;
  }
 
  const {
    POSTGRES_USER = 'merchantsofhope_user',
    POSTGRES_PASSWORD,
    POSTGRES_DB = 'merchantsofhope_supplyanddemandportal',
    POSTGRES_HOST = 'merchantsofhope-supplyanddemandportal-database',
    POSTGRES_PORT = '5432'
  } = process.env;
 
  Iif (!POSTGRES_PASSWORD) {
    return undefined;
  }
 
  return `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}`;
};
 
const config = {
  env: process.env.NODE_ENV || 'development',
  host: process.env.HOST || process.env.BACKEND_HOST || '0.0.0.0',
  port: optionalNumber(process.env.PORT || process.env.BACKEND_PORT, 3001),
  databaseUrl: deriveDatabaseUrl(),
  jwtSecret: process.env.JWT_SECRET,
  corsOrigin: process.env.CORS_ORIGIN || '*',
  logLevel: process.env.LOG_LEVEL || 'info',
  uploadDir: process.env.UPLOAD_DIR || 'uploads/resumes',
  rateLimit: {
    windowMs: optionalNumber(process.env.RATE_LIMIT_WINDOW_MS, 15 * 60 * 1000),
    max: optionalNumber(process.env.RATE_LIMIT_MAX, 100)
  }
};
 
const required = ['databaseUrl', 'jwtSecret'];
const missingKeys = required.filter((key) => !config[key]);
 
Iif (missingKeys.length > 0) {
  throw new Error(`Missing required environment variables: ${missingKeys.join(', ')}`);
}
 
module.exports = config;