Files
Lucky_Wheel/apps/api/src/config/env.validation.ts
T
2026-09-10 01:58:29 +03:30

107 lines
2.1 KiB
TypeScript

import { plainToInstance } from 'class-transformer';
import { IsEnum, IsNumber, IsOptional, IsString, validateSync } from 'class-validator';
enum Environment {
Development = 'development',
Production = 'production',
Test = 'test',
}
export class EnvironmentVariables {
@IsEnum(Environment)
@IsOptional()
NODE_ENV: Environment = Environment.Development;
@IsNumber()
@IsOptional()
PORT: number = 3000;
@IsString()
DATABASE_URL: string;
@IsString()
@IsOptional()
REDIS_HOST: string = 'localhost';
@IsNumber()
@IsOptional()
REDIS_PORT: number = 6379;
@IsString()
@IsOptional()
REDIS_PASSWORD?: string;
@IsString()
JWT_USER_SECRET: string;
@IsString()
@IsOptional()
JWT_USER_EXPIRES_IN: string = '7d';
@IsString()
JWT_ADMIN_ACCESS_SECRET: string;
@IsString()
@IsOptional()
JWT_ADMIN_ACCESS_EXPIRES_IN: string = '1h';
@IsString()
JWT_ADMIN_REFRESH_SECRET: string;
@IsString()
@IsOptional()
JWT_ADMIN_REFRESH_EXPIRES_IN: string = '7d';
@IsString()
@IsOptional()
RAYGAN_SMS_USERNAME?: string;
@IsString()
@IsOptional()
RAYGAN_SMS_PASSWORD?: string;
@IsString()
@IsOptional()
RAYGAN_SMS_LINE_NUMBER?: string;
@IsString()
@IsOptional()
RAYGAN_SMS_API_BASE_URL: string = 'https://api.raygansms.com';
@IsString()
@IsOptional()
SMS_DRIVER: string = 'mock';
@IsString()
@IsOptional()
STORAGE_DRIVER: string = 'local';
@IsString()
@IsOptional()
STORAGE_LOCAL_ROOT: string = './uploads';
@IsString()
@IsOptional()
STORAGE_PUBLIC_URL: string = 'http://localhost:3000/uploads';
@IsString()
@IsOptional()
CORS_ADMIN_ORIGIN: string = 'http://localhost:5173';
@IsString()
@IsOptional()
CORS_CLIENT_ORIGIN: string = 'http://localhost:5174';
}
export function validateEnv(config: Record<string, unknown>) {
const validatedConfig = plainToInstance(EnvironmentVariables, config, {
enableImplicitConversion: true,
});
const errors = validateSync(validatedConfig, { skipMissingProperties: false });
if (errors.length > 0) {
throw new Error(`Config validation error: ${errors.toString()}`);
}
return validatedConfig;
}