Organization Database Configuration
Table of Contents
Organization Database Configuration
Overview
This document describes the configuration and setup for the organization database system in the MyDesk Core API.
Environment Variables
Add these variables to your
.env file:Main Database Configuration
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydesk_core
DB_USERNAME=root
DB_PASSWORD=your_password
Organization Database Configuration
DB_HOST_ORG=127.0.0.1
DB_PORT_ORG=3306
DB_DATABASE_ORG=mydesk
DB_USERNAME_ORG=root
DB_PASSWORD_ORG=your_password
Database Security Settings
DB_SSL_ENABLED=false
MYSQL_ATTR_SSL_CA=
Organization Settings
ORG_LOGO_BASE_URL=/storage/organizations
ORG_DATABASE_PREFIX=mydesk_
Performance Settings
DB_CONNECTION_POOL_SIZE=10
DB_CONNECTION_TIMEOUT=30
DB_QUERY_TIMEOUT=60
Monitoring Settings
HEALTH_CHECK_CACHE_TTL=300
HEALTH_CHECK_ENABLED=true
Backup Settings
BACKUP_ENABLED=true
BACKUP_RETENTION_DAYS=30
BACKUP_STORAGE_PATH=storage/backups
Rate Limiting
DB_RATE_LIMIT_ENABLED=true
DB_RATE_LIMIT_MAX_ATTEMPTS=100
DB_RATE_LIMIT_WINDOW=60
Logging
DB_QUERY_LOG_ENABLED=false
DB_SLOW_QUERY_THRESHOLD=1000Database Setup
1. Main Database
The main database stores organization metadata and user information.
2. Organization Databases
Each organization gets its own database with the naming convention:
mydesk_{orgcode}3. Required Tables
Each organization database must have these tables:
company- Organization informationuser- Organization usersrole- User rolessettings- Organization settingsmigrations- Migration tracking{orgcode}_api_tokens- API tokens for the organization
Security Considerations
1. Database Credentials: Never hardcode database credentials
2. Connection Limits: Implement rate limiting for database connections
3. SSL/TLS: Enable SSL for production environments
4. Access Control: Use dedicated database users with minimal privileges
5. Audit Logging: Log all database operations
Performance Optimization
1. Connection Pooling: Use connection pooling for better performance
2. Query Optimization: Monitor and optimize slow queries
3. Indexing: Ensure proper indexing on frequently queried columns
4. Caching: Implement caching for frequently accessed data
Monitoring
Use the health check command to monitor organization databases:
Check specific organization
php artisan organization:health-check {orgcode}
Check all organizations
php artisan organization:health-check --all
Check only organizations with issues
php artisan organization:health-check --all --issues-only
Export results as JSON
php artisan organization:health-check --all --format=jsonBackup Strategy
1. Automated Backups: Set up automated daily backups
2. Retention Policy: Keep backups for 30 days
3. Testing: Regularly test backup restoration
4. Encryption: Encrypt backup files
Troubleshooting
Common Issues
1. Connection Timeout: Check network connectivity and database server status
2. Migration Failures: Verify migration files and database permissions
3. Performance Issues: Check query performance and database size
4. Permission Errors: Verify database user permissions
Debug Commands
Test database connection
php artisan test:database-connection {orgcode}
Test organization creation
php artisan test:organization-creation --name="Test Org" --email="test@example.com"
Check migration status
php artisan migrate:status --database=mydesk_{orgcode}Best Practices
1. Naming Convention: Use consistent naming for databases and tables
2. Error Handling: Implement comprehensive error handling
3. Logging: Log all important operations
4. Testing: Write comprehensive tests for all database operations
5. Documentation: Keep documentation up to date
6. Version Control: Track all database schema changes
7. Rollback Strategy: Always have a rollback plan for migrations