Overview
Dashboard Dilemas uses MySQL/MariaDB as its database engine. The application connects via PDO with UTF-8 encoding and includes automatic error logging for connection failures.
Database Connection
Environment Variables
Configure your database connection using environment variables:
DB_HOST = localhost
DB_USER = root
DB_PASSWORD = your_password
DB_NAME = dilemas
Connection Configuration
The database connection is established in includes/db.php with the following PDO options:
$host = getenv ( 'DB_HOST' ) ?: 'localhost' ;
$db = getenv ( 'DB_NAME' ) ?: 'dilemas' ;
$user = getenv ( 'DB_USER' ) ?: 'root' ;
$pass = getenv ( 'DB_PASSWORD' ) ?: 'root' ;
$charset = 'utf8mb4' ;
$dsn = "mysql:host= $host ;dbname= $db ;charset= $charset " ;
$options = [
PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ,
PDO :: ATTR_DEFAULT_FETCH_MODE => PDO :: FETCH_ASSOC ,
PDO :: ATTR_EMULATE_PREPARES => false ,
];
The application uses utf8mb4 encoding to support emoji avatars and international characters.
Error Handling
Connection failures are automatically logged to dev/debug/error.log and display a user-friendly error page instead of exposing stack traces:
$logDir = __DIR__ . '/../dev/debug' ;
$logFile = $logDir . '/error.log' ;
if ( ! is_dir ( $logDir ))
mkdir ( $logDir , 0755 , true );
$logLine = '[' . date ( 'Y-m-d H:i:s' ) . '] DB CONNECTION ERROR: '
. $e -> getMessage () . ' (Code: ' . $e -> getCode () . ')' . PHP_EOL ;
file_put_contents ( $logFile , $logLine , FILE_APPEND | LOCK_EX );
Ensure the dev/debug/ directory is writable by the web server for error logging to function properly.
Database Schema
The application uses four main tables with foreign key relationships.
Tables Overview
de_app_users Stores user information, avatars, and activity timestamps
de_app_games Contains dilemma games with categories and client information
de_app_sessions Tracks user game sessions with scores and duration
de_app_areas Defines application areas with color coding
Schema Structure
de_app_users
Stores user profiles and activity tracking:
CREATE TABLE IF NOT EXISTS `de_app_users` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 100 ) NOT NULL ,
`email` varchar ( 100 ) NOT NULL ,
`avatar` varchar ( 10 ) DEFAULT '👤' ,
`createdAt` datetime DEFAULT CURRENT_TIMESTAMP,
`lastActive` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
de_app_games
Defines available dilemma games:
CREATE TABLE IF NOT EXISTS `de_app_games` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 100 ) NOT NULL ,
`category` varchar ( 50 ) NOT NULL ,
`client` varchar ( 100 ) DEFAULT NULL ,
`icon` varchar ( 50 ) DEFAULT '🎮' ,
`clientLogo` varchar ( 255 ) DEFAULT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
de_app_sessions
Tracks user game sessions with foreign key constraints:
CREATE TABLE IF NOT EXISTS `de_app_sessions` (
`id` varchar ( 50 ) NOT NULL ,
`userId` varchar ( 50 ) NOT NULL ,
`gameId` varchar ( 50 ) NOT NULL ,
`score` int ( 11 ) DEFAULT 0 ,
`duration` int ( 11 ) DEFAULT 0 ,
`startedAt` datetime DEFAULT CURRENT_TIMESTAMP,
`endedAt` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ( `id` ),
KEY `userId` ( `userId` ),
KEY `gameId` ( `gameId` ),
CONSTRAINT `fk_session_user` FOREIGN KEY ( `userId` )
REFERENCES `de_app_users` ( `id` ) ON DELETE CASCADE ,
CONSTRAINT `fk_session_game` FOREIGN KEY ( `gameId` )
REFERENCES `de_app_games` ( `id` ) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Cascading deletes ensure that when a user or game is removed, all related sessions are automatically deleted.
de_app_areas
Defines organizational areas with color coding:
CREATE TABLE IF NOT EXISTS `de_app_areas` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 100 ) NOT NULL ,
`color` varchar ( 20 ) DEFAULT '#000000' ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Database Setup
Initial Setup
Create your MySQL database:
CREATE DATABASE dilemas CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Import the schema:
mysql -u root -p dilemas < sql/database.sql
Configure your .env file with the database credentials.
Sample Data
The sql/database.sql file includes sample data for testing:
INSERT INTO `de_app_users` ( `id` , `name` , `email` , `avatar` , `createdAt` , `lastActive` ) VALUES
( 'u1' , 'Carlos Mendez' , '[email protected] ' , '👨' , NOW (), NOW ()),
( 'u2' , 'Ana Lopez' , '[email protected] ' , '👩' , NOW (), NOW ()),
( 'u3' , 'Pedro Silva' , '[email protected] ' , '👨' , NOW (), NOW ()),
( 'u4' , 'Maria Garcia' , '[email protected] ' , '👩' , NOW (), NOW ());
Maintenance
Backup Database
mysqldump -u root -p dilemas > backup_ $( date +%Y%m%d ) .sql
Check Connection Status
Monitor database errors in the log file:
tail -f dev/debug/error.log
Next Steps
Environment Variables Configure all application settings
Email Configuration Set up SMTP for notifications