Files
stechuhr3/backend/SQL_EXECUTION_ORDER.md

179 lines
4.4 KiB
Markdown

# TimeClock v3 - SQL-Scripts Ausführungsreihenfolge
Diese Anleitung zeigt, welche SQL-Scripts in welcher Reihenfolge ausgeführt werden müssen.
## Auf dem Server ausführen:
```bash
cd /var/www/timeclock/backend
# DB-Credentials aus .env
DB_HOST=$(grep DB_HOST .env | cut -d= -f2)
DB_USER=$(grep DB_USER .env | cut -d= -f2)
DB_PASSWORD=$(grep DB_PASSWORD .env | cut -d= -f2)
DB_NAME=$(grep DB_NAME .env | cut -d= -f2)
# Alias für einfachere Befehle
alias dbexec="mysql -h $DB_HOST -u $DB_USER -p'$DB_PASSWORD' $DB_NAME"
```
## 1. Basis-Schema (WICHTIG - zuerst!)
```bash
# Erstellt alle Haupt-Tabellen
dbexec < database-schema.sql
# Zeige erstellte Tabellen
dbexec -e "SHOW TABLES;"
```
## 2. Zusätzliche Tabellen
```bash
# Invitation Table
dbexec < create-invitation-table.sql
# Watcher Table
dbexec < create-watcher-table.sql
```
## 3. Indices für Performance
```bash
# Sick Index
dbexec < add-sick-index.sql
# Vacation Index
dbexec < add-vacation-index.sql
```
## 4. Timewish Setup (korrigierte Version!)
```bash
# Timewish mit Zeiträumen
dbexec < setup-timewish-complete.sql
# ODER falls noch Fehler: Nur die Spalten hinzufügen
dbexec << 'EOF'
-- Prüfe ob start_date existiert
SET @col_exists = (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'timewish'
AND COLUMN_NAME = 'start_date');
SET @sql = IF(@col_exists = 0,
'ALTER TABLE timewish ADD COLUMN start_date DATE DEFAULT ''2023-01-01'' AFTER end_time;',
'SELECT ''start_date existiert bereits'';'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- end_date
SET @col_exists = (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'timewish'
AND COLUMN_NAME = 'end_date');
SET @sql = IF(@col_exists = 0,
'ALTER TABLE timewish ADD COLUMN end_date DATE DEFAULT NULL AFTER start_date;',
'SELECT ''end_date existiert bereits'';'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
EOF
```
## 5. Optionale Scripts (nur bei Bedarf!)
### User als Admin setzen
```bash
# Passe user_id an! (Deine User-ID aus der users-Tabelle)
dbexec < set-user-admin.sql
```
### Timezone-Fixes (nur falls Probleme mit Zeitzonen)
```bash
# Worklog Timezone korrigieren
dbexec < fix-worklog-timezone.sql
```
### Overtime Offset Update
```bash
dbexec < update-overtime-offset.sql
```
### Wednesday-Fix (nur falls benötigt)
```bash
dbexec < add-missing-wednesday.sql
```
## Überprüfung
```bash
# Zeige alle Tabellen
dbexec -e "SHOW TABLES;"
# Zeige timewish-Struktur
dbexec -e "DESCRIBE timewish;"
# Zeige Anzahl User
dbexec -e "SELECT COUNT(*) AS user_count FROM users;"
# Zeige deine Timewishes
dbexec -e "SELECT * FROM timewish WHERE user_id = 1 ORDER BY day, start_date;"
```
## Nach SQL-Ausführung: Backend neu starten
```bash
# Backend neu starten damit es die neuen Tabellen/Spalten erkennt
pm2 restart timeclock-backend
# Logs prüfen
pm2 logs timeclock-backend --lines 30
# Sollte zeigen:
# 🕐 TimeClock Server läuft auf Port 3010
# 📍 API verfügbar unter http://localhost:3010/api
```
## Schnell-Befehl (alle wichtigen Scripts):
```bash
cd /var/www/timeclock/backend
# DB-Credentials setzen
DB_HOST=$(grep DB_HOST .env | cut -d= -f2)
DB_USER=$(grep DB_USER .env | cut -d= -f2)
DB_PASSWORD=$(grep DB_PASSWORD .env | cut -d= -f2)
DB_NAME=$(grep DB_NAME .env | cut -d= -f2)
echo "Führe SQL-Scripts aus..."
# 1. Basis-Schema
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < database-schema.sql 2>&1 | grep -v "already exists" || true
# 2. Zusätzliche Tabellen
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < create-invitation-table.sql 2>&1 | grep -v "already exists" || true
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < create-watcher-table.sql 2>&1 | grep -v "already exists" || true
# 3. Indices
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < add-sick-index.sql 2>&1 || true
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < add-vacation-index.sql 2>&1 || true
# 4. Timewish (korrigiert)
mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DB_NAME < setup-timewish-complete.sql
echo "✅ SQL-Scripts ausgeführt!"
# Backend neu starten
pm2 restart timeclock-backend
echo "✅ Backend neu gestartet!"
```
Kopiere diesen Schnell-Befehl auf den Server und führe ihn aus! 🚀