feat: Initialize NestJS backend project with Prisma, core modules, configuration, and common utilities.
This commit is contained in:
100
src/config/configuration.ts
Normal file
100
src/config/configuration.ts
Normal file
@@ -0,0 +1,100 @@
|
||||
export default () => ({
|
||||
// Application
|
||||
app: {
|
||||
name: process.env.APP_NAME || 'Real Estate Agent Platform',
|
||||
env: process.env.NODE_ENV || 'development',
|
||||
port: parseInt(process.env.PORT || '3001', 10),
|
||||
apiUrl: process.env.API_URL || 'http://localhost:3001',
|
||||
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:3000',
|
||||
adminUrl: process.env.ADMIN_URL || 'http://localhost:3002',
|
||||
},
|
||||
|
||||
// Database
|
||||
database: {
|
||||
url: process.env.DATABASE_URL,
|
||||
},
|
||||
|
||||
// JWT Authentication
|
||||
jwt: {
|
||||
secret: process.env.JWT_SECRET || 'super-secret-key',
|
||||
accessExpiration: process.env.JWT_ACCESS_EXPIRATION || '15m',
|
||||
refreshExpiration: process.env.JWT_REFRESH_EXPIRATION || '7d',
|
||||
},
|
||||
|
||||
// Password Hashing
|
||||
bcrypt: {
|
||||
saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS || '12', 10),
|
||||
},
|
||||
|
||||
// Google OAuth
|
||||
google: {
|
||||
clientId: process.env.GOOGLE_CLIENT_ID,
|
||||
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
||||
callbackUrl: process.env.GOOGLE_CALLBACK_URL,
|
||||
},
|
||||
|
||||
// Facebook OAuth
|
||||
facebook: {
|
||||
appId: process.env.FACEBOOK_APP_ID,
|
||||
appSecret: process.env.FACEBOOK_APP_SECRET,
|
||||
callbackUrl: process.env.FACEBOOK_CALLBACK_URL,
|
||||
},
|
||||
|
||||
// AWS S3
|
||||
aws: {
|
||||
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
||||
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
||||
region: process.env.AWS_REGION || 'us-east-1',
|
||||
s3Bucket: process.env.AWS_S3_BUCKET,
|
||||
},
|
||||
|
||||
// Email
|
||||
mail: {
|
||||
host: process.env.MAIL_HOST,
|
||||
port: parseInt(process.env.MAIL_PORT || '587', 10),
|
||||
user: process.env.MAIL_USER,
|
||||
password: process.env.MAIL_PASSWORD,
|
||||
from: process.env.MAIL_FROM,
|
||||
},
|
||||
|
||||
// Stripe
|
||||
stripe: {
|
||||
secretKey: process.env.STRIPE_SECRET_KEY,
|
||||
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
|
||||
publishableKey: process.env.STRIPE_PUBLISHABLE_KEY,
|
||||
},
|
||||
|
||||
// Firebase
|
||||
firebase: {
|
||||
projectId: process.env.FIREBASE_PROJECT_ID,
|
||||
clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
|
||||
privateKey: process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, '\n'),
|
||||
},
|
||||
|
||||
// Redis
|
||||
redis: {
|
||||
host: process.env.REDIS_HOST || 'localhost',
|
||||
port: parseInt(process.env.REDIS_PORT || '6379', 10),
|
||||
password: process.env.REDIS_PASSWORD || undefined,
|
||||
db: parseInt(process.env.REDIS_DB || '0', 10),
|
||||
},
|
||||
|
||||
// Rate Limiting
|
||||
throttle: {
|
||||
ttl: parseInt(process.env.THROTTLE_TTL || '60', 10),
|
||||
limit: parseInt(process.env.THROTTLE_LIMIT || '100', 10),
|
||||
},
|
||||
|
||||
// Logging
|
||||
logging: {
|
||||
level: process.env.LOG_LEVEL || 'debug',
|
||||
},
|
||||
|
||||
// CORS
|
||||
cors: {
|
||||
origins: process.env.CORS_ORIGINS?.split(',') || [
|
||||
'http://localhost:3000',
|
||||
'http://localhost:3002',
|
||||
],
|
||||
},
|
||||
});
|
||||
1
src/config/index.ts
Normal file
1
src/config/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { default as configuration } from './configuration';
|
||||
Reference in New Issue
Block a user