Files
ai-stylegallery/prp/configuration-settings.md
2025-11-11 21:23:00 +01:00

636 lines
17 KiB
Markdown

# Configuration and Settings Specification
## Overview
Comprehensive configuration management system using Laravel's settings with database storage, environment variables, and runtime configuration for flexible application behavior.
## Configuration Architecture
### Configuration Sources (Priority Order)
1. **Runtime Settings** (Database) - User-configurable application behavior
2. **Environment Variables** (`.env`) - Sensitive and environment-specific settings
3. **Configuration Files** (`config/`) - Framework and package defaults
4. **Hardcoded Defaults** - Fallback values in code
```
┌─────────────────────────────────────────────────────────┐
│ Runtime Settings (Database) │
│ • User-configurable behavior │
│ • Admin-managed settings │
│ • Feature flags and toggles │
└─────────────────────┬───────────────────────────────────┘
│ Priority 1 (Highest)
┌─────────────────────────────────────────────────────────┐
│ Environment Variables (.env) │
│ • Sensitive credentials │
│ • Environment-specific configuration │
│ • Deployment-specific settings │
└─────────────────────┬───────────────────────────────────┘
│ Priority 2
┌─────────────────────────────────────────────────────────┐
│ Configuration Files (config/) │
│ • Laravel framework settings │
│ • Package configurations │
│ • Default application behavior │
└─────────────────────┬───────────────────────────────────┘
│ Priority 3
┌─────────────────────────────────────────────────────────┐
│ Hardcoded Defaults │
│ • Fallback values in code │
│ • Emergency defaults │
└─────────────────────────────────────────────────────────┘
```
## Settings Model
### Database Structure
**Table**: `settings`
**Schema**:
```sql
CREATE TABLE settings (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
key VARCHAR(255) UNIQUE NOT NULL,
value LONGTEXT NULL,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL
);
```
**Model**: `app/Models/Setting.php`
**Key Features**:
- Unique constraint on `key` field
- `value` stored as LONGTEXT for flexibility (JSON, arrays, large strings)
- Automatic timestamps for audit trail
### Setting Access Patterns
**Simple Value Retrieval**:
```php
$value = Setting::where('key', 'app_name')->first()->value ?? 'Default Name';
```
**Type-Safe Access**:
```php
// Boolean setting
$enabled = Setting::getBoolean('feature_enabled', false);
// Integer setting
$maxImages = Setting::getInteger('max_images_per_user', 100);
// JSON setting
$parameters = Setting::getJson('api_parameters', []);
```
## Configuration Categories
### 1. Application Settings
**Core Application Behavior**:
```php
// Application Identity
'app_name' => 'AI StyleGallery'
'app_description' => 'Transform images with AI styles'
'app_url' => 'https://your-domain.com'
// Gallery Behavior
'gallery_heading' => 'Meine Bildergalerie'
'default_style_id' => 1
'new_image_timespan_minutes' => 60
'image_refresh_interval' => 5 // seconds
// Upload Configuration
'max_upload_size' => 10 // MB
'allowed_image_types' => 'jpeg,jpg,png,webp'
'auto_process_uploaded_images' => false
// UI Configuration
'show_print_button' => true
'default_theme' => 'light'
'default_locale' => 'de'
```
### 2. AI Processing Settings
**Processing Behavior**:
```php
// Timeout Configuration
'comfyui_timeout' => 180 // seconds
'runwareai_timeout' => 60 // seconds
'max_processing_time' => 300 // seconds
// Retry Configuration
'max_retry_attempts' => 3
'retry_delay' => 1000000 // microseconds
// Queue Management
'max_concurrent_processes' => 3
'process_queue_enabled' => true
// Quality Settings
'default_output_quality' => 95 // JPEG quality
'enable_progressive_jpeg' => true
```
### 3. Storage Configuration
**File Management**:
```php
// Storage Paths
'upload_path' => 'uploads/'
'style_preview_path' => 'style_previews/'
'temp_path' => 'temp/'
// Cleanup Settings
'auto_cleanup_temp_files' => true
'temp_file_retention_hours' => 24
'max_storage_per_user_gb' => 5
// CDN Configuration
'cdn_enabled' => false
'cdn_base_url' => 'https://cdn.your-domain.com'
```
### 4. Notification Settings
**Communication Preferences**:
```php
// Email Settings
'email_notifications_enabled' => true
'admin_notification_email' => 'admin@your-domain.com'
'notification_from_email' => 'noreply@your-domain.com'
// Processing Notifications
'notify_on_processing_start' => false
'notify_on_processing_complete' => true
'notify_on_processing_error' => true
// Admin Alerts
'alert_on_high_error_rate' => true
'error_rate_threshold' => 10 // percentage
```
### 5. Security Settings
**Security Configuration**:
```php
// Session Security
'session_lifetime' => 120 // minutes
'admin_session_lifetime' => 60 // minutes
'enable_session_fixation_protection' => true
// Rate Limiting
'login_attempts_per_minute' => 5
'api_rate_limit_per_hour' => 1000
// Content Security
'enable_csp' => true
'csp_report_only' => false
```
### 6. Performance Settings
**Performance Optimization**:
```php
// Caching
'cache_enabled' => true
'cache_ttl' => 3600 // seconds
'style_cache_ttl' => 7200 // seconds
// Image Optimization
'enable_lazy_loading' => true
'thumbnail_size' => 300 // pixels
'preview_quality' => 80 // JPEG quality
// Database Optimization
'query_cache_enabled' => true
'eager_loading_enabled' => true
```
## Environment Configuration
### Sensitive Configuration (`.env`)
```bash
# Application
APP_NAME="AI StyleGallery"
APP_ENV=production
APP_KEY=base64:your-app-key-here
APP_URL=https://your-domain.com
# Database
DB_CONNECTION=sqlite
DB_DATABASE=/path/to/database.sqlite
# Mail Configuration
MAIL_MAILER=smtp
MAIL_HOST=smtp.your-provider.com
MAIL_PORT=587
MAIL_USERNAME=your-email@domain.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
# Redis (for caching)
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
# Broadcasting (for real-time features)
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your-pusher-id
PUSHER_APP_KEY=your-pusher-key
PUSHER_APP_SECRET=your-pusher-secret
PUSHER_HOST=your-pusher-host
PUSHER_PORT=443
PUSHER_SCHEME=https
# AI Service Credentials
COMFYUI_API_URL=https://your-comfyui-server.com
COMFYUI_API_KEY=your-comfyui-key
RUNWAREAI_API_URL=https://api.runwareai.com
RUNWAREAI_API_TOKEN=your-runwareai-token
```
## Configuration Files
### Laravel Configuration (`config/`)
#### `config/app.php`
```php
'locale' => env('APP_LOCALE', 'de'),
'timezone' => env('APP_TIMEZONE', 'Europe/Berlin'),
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
```
#### `config/filesystems.php`
```php
'public' => [
'driver' => 'local',
'root' => public_path('storage'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
```
#### `config/filament.php`
```php
'brand' => [
'name' => env('APP_NAME', 'AI StyleGallery'),
'logo' => '/images/logo.png',
],
'auth' => [
'guard' => 'web',
'pages' => [
'login' => \App\Filament\Pages\Login::route('/login'),
],
],
```
## Runtime Configuration Management
### Setting Access Helpers
**Location**: `app/Services/SettingsService.php`
**Core Methods**:
#### `get(string $key, $default = null)`
- Retrieves setting value with optional default
- Automatic type casting for common types
#### `set(string $key, $value): void`
- Stores or updates setting value
- Handles type conversion and validation
#### `getBoolean(string $key, bool $default = false): bool`
- Retrieves boolean setting with fallback
#### `getInteger(string $key, int $default = 0): int`
- Retrieves integer setting with fallback
#### `getJson(string $key, $default = []): array`
- Retrieves JSON setting as associative array
**Usage Examples**:
```php
// Application settings
$appName = Settings::get('app_name', 'AI StyleGallery');
$maxCopies = Settings::getInteger('max_print_copies', 10);
$features = Settings::getJson('enabled_features', []);
// Feature flags
$printEnabled = Settings::getBoolean('show_print_button', true);
$notificationsEnabled = Settings::getBoolean('email_notifications_enabled', true);
```
### Configuration Caching
**Cache Strategy**:
- Settings cached in Redis/memory for performance
- Automatic cache invalidation on setting changes
- Separate TTL for different setting categories
**Implementation**:
```php
// Cache key pattern
'settings:' . $key => $value
// Cache TTL by category
'application_settings' => 3600, // 1 hour
'ai_settings' => 1800, // 30 minutes
'security_settings' => 7200, // 2 hours
```
## Admin Configuration Interface
### Filament Settings Management
**Settings Resource**: `app/Filament/Resources/SettingResource.php`
**Features**:
- **CRUD Interface**: Create, read, update, delete settings
- **Type Validation**: Ensure setting values match expected types
- **Bulk Operations**: Mass update related settings
- **Import/Export**: Backup and restore configuration
- **Validation**: Prevent invalid configuration values
**Setting Types**:
- **Text**: Simple string values
- **Number**: Integer and float values
- **Boolean**: True/false toggles
- **JSON**: Complex configuration objects
- **Select**: Predefined option lists
### Settings Categories
**Organization**:
- **General**: Application name, description, URLs
- **Gallery**: Image handling, display options
- **AI Processing**: Provider settings, timeouts, quality
- **Storage**: File paths, cleanup, CDN settings
- **Notifications**: Email, alerts, communication
- **Security**: Authentication, rate limiting, privacy
- **Performance**: Caching, optimization, limits
## Dynamic Configuration
### Feature Flags
**Implementation**:
```php
// Feature flag checking
if (Settings::getBoolean('enable_batch_processing', false)) {
// Enable batch processing features
}
// Environment-specific features
if (app()->environment('production')) {
$features = Settings::getJson('production_features', []);
} else {
$features = Settings::getJson('development_features', []);
}
```
**Common Feature Flags**:
- `enable_printing`: Show/hide print functionality
- `enable_batch_processing`: Allow multiple image processing
- `enable_social_features`: User sharing capabilities
- `enable_advanced_styles`: Premium style options
### Environment-Based Configuration
**Automatic Configuration**:
```php
// Different settings per environment
$environment = app()->environment();
switch ($environment) {
case 'production':
$settings = Settings::getJson('production_overrides', []);
break;
case 'staging':
$settings = Settings::getJson('staging_overrides', []);
break;
default:
$settings = Settings::getJson('development_overrides', []);
}
```
## Configuration Validation
### Setting Validation Rules
**Validation Framework**:
```php
$rules = [
'app_name' => 'required|string|max:255',
'max_upload_size' => 'required|integer|min:1|max:100',
'allowed_image_types' => 'required|string',
'comfyui_timeout' => 'required|integer|min:30|max:600',
'cdn_enabled' => 'boolean',
'api_parameters' => 'nullable|json',
];
```
**Validation Implementation**:
```php
// Validate before saving
$validator = Validator::make($settings, $rules);
if ($validator->fails()) {
throw new ValidationException($validator->errors());
}
// Type conversion
$sanitizedValue = match($setting->type) {
'boolean' => (bool) $value,
'integer' => (int) $value,
'json' => json_decode($value, true),
default => (string) $value,
};
```
## Configuration Migration
### Version Management
**Configuration Versions**:
- Track configuration schema versions
- Automatic migration of configuration values
- Backup before major configuration changes
**Migration Example**:
```php
// Configuration migration for new version
if ($currentVersion < 2.0) {
// Migrate old 'upload_size' to 'max_upload_size'
$oldValue = Settings::get('upload_size');
if ($oldValue) {
Settings::set('max_upload_size', $oldValue * 1024 * 1024); // Convert MB to bytes
Settings::forget('upload_size');
}
}
```
### Backup and Restore
**Configuration Backup**:
```php
// Export all settings
$allSettings = Settings::all();
$backup = [
'version' => config('app.version'),
'timestamp' => now()->toISOString(),
'settings' => $allSettings->pluck('value', 'key')->toArray(),
];
// Save to file
Storage::put('config-backup-' . date('Y-m-d-H-i-s') . '.json', json_encode($backup));
```
## Monitoring and Analytics
### Configuration Monitoring
**Change Tracking**:
- Log all configuration changes
- Track who made changes and when
- Alert on critical configuration modifications
**Performance Impact**:
- Monitor configuration load times
- Track cache hit/miss ratios
- Alert on configuration-related errors
### Analytics Integration
**Usage Analytics**:
```php
// Track feature usage
if (Settings::getBoolean('analytics_enabled', false)) {
Analytics::track('feature_used', [
'feature' => 'style_application',
'style_id' => $style->id,
'user_id' => auth()->id(),
]);
}
```
## Security Considerations
### Sensitive Configuration
**Encryption**:
- Encrypt sensitive setting values in database
- Use Laravel's encryption helpers for sensitive data
- Separate encryption keys for different environments
**Access Control**:
- Restrict sensitive settings to admin users only
- Audit trail for sensitive configuration changes
- Automatic masking in logs and exports
### Configuration Injection Prevention
**Input Sanitization**:
- Validate all configuration inputs
- Prevent code injection through configuration
- Escape special characters in configuration values
## Deployment Configuration
### Environment-Specific Settings
**Deployment Pipeline**:
```php
// Production deployment
Settings::set('app_environment', 'production');
Settings::set('cdn_enabled', true);
Settings::set('debug_mode', false);
// Development deployment
Settings::set('app_environment', 'development');
Settings::set('cdn_enabled', false);
Settings::set('debug_mode', true);
```
### Configuration Synchronization
**Multi-Server Setup**:
- Synchronize configuration across web servers
- Handle configuration updates without downtime
- Validate configuration consistency
## Troubleshooting Configuration
### Common Issues
**Configuration Not Loading**:
- Check database connectivity
- Verify settings table exists
- Validate setting key names
**Performance Issues**:
- Monitor configuration cache hit rates
- Check for configuration-related database queries
- Optimize frequently accessed settings
**Type Mismatches**:
- Ensure proper type casting in code
- Validate setting types in admin interface
- Handle legacy configuration gracefully
### Debug Tools
**Configuration Inspector**:
```php
// Development-only configuration debugging
if (app()->environment('local')) {
Route::get('/admin/config-debug', function () {
return [
'all_settings' => Settings::all(),
'environment' => app()->environment(),
'cached_settings' => Cache::get('settings:*'),
];
});
}
```
## Future Configuration Enhancements
### Advanced Features
**Configuration Templates**:
- Predefined configuration sets for different use cases
- One-click configuration application
- Configuration comparison and diff tools
**Dynamic Configuration**:
- Real-time configuration updates
- Hot-reloading of configuration changes
- A/B testing for configuration options
**External Configuration**:
- Integration with external configuration management systems
- Cloud-based configuration storage
- Configuration sharing across projects
### Configuration API
**RESTful Configuration Management**:
- API endpoints for configuration management
- Version control for configuration changes
- Configuration validation via API
**Webhook Integration**:
- Notify external systems of configuration changes
- Trigger deployments on configuration updates
- Integrate with monitoring and alerting systems