Files
rxminder/vite.config.ts
William Valentin 8c591563c9 feat: consolidate architecture and eliminate code duplication
🏗️ Major architectural improvements:

Database Layer:
- Consolidated duplicate CouchDB services (~800 lines of duplicated code eliminated)
- Implemented strategy pattern with MockDatabaseStrategy and ProductionDatabaseStrategy
- Created unified DatabaseService with automatic environment detection
- Maintained backward compatibility via updated factory pattern

Configuration System:
- Centralized all environment variables in single config/app.config.ts
- Added comprehensive configuration validation with clear error messages
- Eliminated hardcoded base URLs and scattered env var access across 8+ files
- Supports both legacy and new environment variable names

Logging Infrastructure:
- Replaced 25+ scattered console.log statements with structured Logger service
- Added log levels (ERROR, WARN, INFO, DEBUG, TRACE) and contexts (AUTH, DATABASE, API, UI)
- Production-safe logging with automatic level adjustment
- Development helpers for debugging and performance monitoring

Docker & Deployment:
- Removed duplicate docker/Dockerfile configuration
- Enhanced root Dockerfile with comprehensive environment variable support
- Added proper health checks and security improvements

Code Quality:
- Fixed package name consistency (rxminder → RxMinder)
- Updated services to use centralized configuration and logging
- Resolved all ESLint errors and warnings
- Added comprehensive documentation and migration guides

📊 Impact:
- Eliminated ~500 lines of duplicate code
- Single source of truth for database, configuration, and logging
- Better type safety and error handling
- Improved development experience and maintainability

📚 Documentation:
- Added ARCHITECTURE_MIGRATION.md with detailed migration guide
- Created IMPLEMENTATION_SUMMARY.md with metrics and benefits
- Inline documentation for all new services and interfaces

🔄 Backward Compatibility:
- All existing code continues to work unchanged
- Legacy services show deprecation warnings but remain functional
- Gradual migration path available for development teams

Breaking Changes: None (full backward compatibility maintained)
2025-09-08 01:09:48 -07:00

76 lines
2.3 KiB
TypeScript

import path from 'path';
import { defineConfig, loadEnv } from 'vite';
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, '.', '');
return {
define: {
// Legacy API key support
'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY),
// Application configuration
'import.meta.env.VITE_APP_NAME': JSON.stringify(
env.VITE_APP_NAME || env.APP_NAME || 'RxMinder'
),
'import.meta.env.VITE_APP_VERSION': JSON.stringify(
env.VITE_APP_VERSION || env.APP_VERSION || '1.0.0'
),
'import.meta.env.VITE_BASE_URL': JSON.stringify(
env.APP_BASE_URL || env.VITE_BASE_URL || 'http://localhost:5173'
),
// Database configuration
'import.meta.env.VITE_COUCHDB_URL': JSON.stringify(env.VITE_COUCHDB_URL),
'import.meta.env.VITE_COUCHDB_USER': JSON.stringify(
env.VITE_COUCHDB_USER
),
'import.meta.env.VITE_COUCHDB_PASSWORD': JSON.stringify(
env.VITE_COUCHDB_PASSWORD
),
// Email configuration
'import.meta.env.VITE_MAILGUN_API_KEY': JSON.stringify(
env.VITE_MAILGUN_API_KEY
),
'import.meta.env.VITE_MAILGUN_DOMAIN': JSON.stringify(
env.VITE_MAILGUN_DOMAIN
),
'import.meta.env.VITE_MAILGUN_FROM_NAME': JSON.stringify(
env.VITE_MAILGUN_FROM_NAME
),
'import.meta.env.VITE_MAILGUN_FROM_EMAIL': JSON.stringify(
env.VITE_MAILGUN_FROM_EMAIL
),
// OAuth configuration
'import.meta.env.VITE_GOOGLE_CLIENT_ID': JSON.stringify(
env.VITE_GOOGLE_CLIENT_ID
),
'import.meta.env.VITE_GITHUB_CLIENT_ID': JSON.stringify(
env.VITE_GITHUB_CLIENT_ID
),
// Feature flags
'import.meta.env.ENABLE_EMAIL_VERIFICATION': JSON.stringify(
env.ENABLE_EMAIL_VERIFICATION !== 'false'
),
'import.meta.env.ENABLE_OAUTH': JSON.stringify(
env.ENABLE_OAUTH !== 'false'
),
'import.meta.env.ENABLE_ADMIN_INTERFACE': JSON.stringify(
env.ENABLE_ADMIN_INTERFACE !== 'false'
),
'import.meta.env.DEBUG_MODE': JSON.stringify(
env.DEBUG_MODE === 'true' || mode === 'development'
),
},
resolve: {
alias: {
'@': path.resolve(__dirname, '.'),
},
},
};
});