# MySQL Datenbank Setup für TimeClock

## 1. MySQL Installation prüfen

```bash
# MySQL Version prüfen
mysql --version

# Falls nicht installiert (openSUSE):
sudo zypper install mysql mysql-server

# MySQL-Server starten
sudo systemctl start mysql
sudo systemctl enable mysql
```

## 2. MySQL Root-Passwort setzen (falls nötig)

```bash
# MySQL Secure Installation ausführen
sudo mysql_secure_installation

# Folgende Fragen beantworten:
# - Set root password? [Y/n] Y
# - Remove anonymous users? [Y/n] Y
# - Disallow root login remotely? [Y/n] Y
# - Remove test database? [Y/n] Y
# - Reload privilege tables? [Y/n] Y
```

## 3. Datenbank und Benutzer erstellen

### Option A: Automatisches Setup-Script

```bash
cd /home/torsten/Programs/TimeClock/backend
chmod +x setup-mysql.sh
./setup-mysql.sh
```

Das Script fragt nach:
- MySQL Root-Passwort
- Neuem Datenbank-Benutzer (Standard: timeclock_user)
- Neuem Benutzer-Passwort

### Option B: Manuelles Setup

```bash
# MySQL als root einloggen
mysql -u root -p
```

Dann in der MySQL-Konsole:

```sql
-- 1. Datenbank erstellen
CREATE DATABASE IF NOT EXISTS stechuhr2 
  CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

-- 2. Benutzer erstellen (Passwort anpassen!)
CREATE USER IF NOT EXISTS 'timeclock_user'@'localhost' 
  IDENTIFIED BY 'IhrSicheresPasswort123!';

-- 3. Berechtigungen vergeben
GRANT ALL PRIVILEGES ON stechuhr2.* 
  TO 'timeclock_user'@'localhost';

-- 4. Privilegien neu laden
FLUSH PRIVILEGES;

-- 5. Prüfen
SHOW DATABASES;
SELECT User, Host FROM mysql.user WHERE User='timeclock_user';

-- 6. Verlassen
EXIT;
```

## 4. Tabellen erstellen

Die Tabellen existieren bereits in Ihrer DB. Falls Sie sie neu erstellen möchten:

```bash
# SQL-Dump importieren (falls vorhanden)
mysql -u timeclock_user -p stechuhr2 < database-schema.sql
```

Oder mit dem automatischen Migrations-Script:

```bash
cd /home/torsten/Programs/TimeClock/backend
node scripts/create-tables.js
```

## 5. .env Datei konfigurieren

```bash
cd /home/torsten/Programs/TimeClock/backend
nano .env
```

Setzen Sie folgende Werte:

```env
DB_HOST=localhost
DB_PORT=3306
DB_USER=timeclock_user
DB_PASSWORD=IhrSicheresPasswort123!
DB_NAME=stechuhr2
```

## 6. Verbindung testen

```bash
# Mit neuen Credentials verbinden
mysql -u timeclock_user -p stechuhr2

# In MySQL-Konsole:
SHOW TABLES;
EXIT;
```

## 7. Server starten

```bash
cd /home/torsten/Programs/TimeClock
npm run dev
```

**Erwartete Ausgabe:**
```
✅ Sequelize: MySQL-Datenbankverbindung hergestellt
✅ Sequelize: Models initialisiert
🕐 TimeClock Server läuft auf Port 3010
```

## Troubleshooting

### "Access denied for user"

```bash
# Berechtigungen prüfen
mysql -u root -p
```

```sql
SHOW GRANTS FOR 'timeclock_user'@'localhost';
-- Falls leer: Berechtigungen neu vergeben (siehe Schritt 3)
```

### "Unknown database stechuhr2"

```bash
mysql -u root -p
```

```sql
CREATE DATABASE stechuhr2;
```

### "Can't connect to MySQL server"

```bash
# MySQL-Status prüfen
sudo systemctl status mysql

# Starten falls gestoppt
sudo systemctl start mysql
```

### Port 3306 bereits belegt

```bash
# Prüfen was auf Port 3306 läuft
sudo ss -tlnp | grep 3306

# MySQL-Port ändern (in /etc/my.cnf)
[mysqld]
port=3307
```

## Schnell-Setup für Entwicklung

Falls Sie nur schnell testen möchten:

```bash
# MySQL als root ohne Passwort
mysql -u root

CREATE DATABASE stechuhr2;
EXIT;
```

Dann in `.env`:
```env
DB_USER=root
DB_PASSWORD=
DB_NAME=stechuhr2
```

⚠️ **Nicht für Produktion verwenden!**

## Existierende stechuhr2 DB verwenden

Falls Sie bereits eine `stechuhr2` Datenbank haben:

```bash
# Prüfen Sie die Credentials
mysql -u IHR_USER -p stechuhr2

# Tabellen anzeigen
SHOW TABLES;
```

Dann in `.env`:
```env
DB_USER=IHR_EXISTIERENDER_USER
DB_PASSWORD=IHR_EXISTIERENDES_PASSWORT
DB_NAME=stechuhr2
```

## Benutzer erstellen (Template)

```sql
-- Benutzer mit vollem Zugriff
CREATE USER 'timeclock_user'@'localhost' IDENTIFIED BY 'Passwort123';
GRANT ALL PRIVILEGES ON stechuhr2.* TO 'timeclock_user'@'localhost';
FLUSH PRIVILEGES;

-- Nur Lese-Zugriff (optional)
CREATE USER 'timeclock_readonly'@'localhost' IDENTIFIED BY 'Passwort123';
GRANT SELECT ON stechuhr2.* TO 'timeclock_readonly'@'localhost';
FLUSH PRIVILEGES;
```

## Backup erstellen

```bash
# Vor Änderungen immer Backup!
mysqldump -u timeclock_user -p stechuhr2 > backup_$(date +%Y%m%d_%H%M%S).sql

# Restore
mysql -u timeclock_user -p stechuhr2 < backup_20251015_143000.sql
```



