Files
stechuhr3/backend/SQL_EXECUTION_ORDER.md

4.4 KiB

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:

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!)

# Erstellt alle Haupt-Tabellen
dbexec < database-schema.sql

# Zeige erstellte Tabellen
dbexec -e "SHOW TABLES;"

2. Zusätzliche Tabellen

# Invitation Table
dbexec < create-invitation-table.sql

# Watcher Table  
dbexec < create-watcher-table.sql

3. Indices für Performance

# Sick Index
dbexec < add-sick-index.sql

# Vacation Index
dbexec < add-vacation-index.sql

4. Timewish Setup (korrigierte Version!)

# 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

# Passe user_id an! (Deine User-ID aus der users-Tabelle)
dbexec < set-user-admin.sql

Timezone-Fixes (nur falls Probleme mit Zeitzonen)

# Worklog Timezone korrigieren
dbexec < fix-worklog-timezone.sql

Overtime Offset Update

dbexec < update-overtime-offset.sql

Wednesday-Fix (nur falls benötigt)

dbexec < add-missing-wednesday.sql

Überprüfung

# 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

# 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):

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! 🚀