Skip to content

[BE-48] Startup environment variable validation (Joi schema) #1238

Description

@yusuftomilola

Overview

The app starts without any warning when required environment variables are missing (e.g. JWT_SECRET, PAYSTACK_SECRET_KEY, DATABASE_HOST). Missing config causes cryptic runtime errors deep in service calls. Joi validation at startup gives an immediate, actionable error listing exactly which variables are absent.

Context

  • ConfigModule.forRoot() in backend/src/app.module.ts — supports a validationSchema option from @nestjs/config
  • Joi is not currently installed — add it
  • backend/.env.example is the reference for required variables

Tasks

  • Install joi: npm install joi
  • Create backend/src/config/env.validation.ts exporting a Joi ObjectSchema
  • Required variables to validate:
    • DB: DATABASE_HOST, DATABASE_PORT (number), DATABASE_NAME, DATABASE_USERNAME, DATABASE_PASSWORD
    • JWT: JWT_SECRET, JWT_EXPIRATION, JWT_REFRESH_SECRET, JWT_REFRESH_EXPIRATION
    • Paystack: PAYSTACK_SECRET_KEY, PAYSTACK_PUBLIC_KEY
    • Cloudinary: CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET
    • Redis: REDIS_HOST, REDIS_PORT (number)
    • Email: SENDGRID_API_KEY (or SMTP_HOST — whichever is used)
  • Pass the schema to ConfigModule.forRoot({ validationSchema, validationOptions: { abortEarly: false } }) so all missing variables are reported at once
  • App must refuse to start with a clear error listing each missing variable
  • Update backend/.env.example to document every required variable with a description comment

Files to Modify / Create

  • New: backend/src/config/env.validation.ts
  • backend/src/app.module.ts
  • backend/.env.example

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions