Initial commit: TimeClock v3 - Node.js/Vue.js Zeiterfassung

Features:
- Backend: Node.js/Express mit MySQL/MariaDB
- Frontend: Vue.js 3 mit Composition API
- UTC-Zeithandling für korrekte Zeiterfassung
- Timewish-basierte Überstundenberechnung
- Wochenübersicht mit Urlaubs-/Krankheits-/Feiertagshandling
- Bereinigtes Arbeitsende (Generell/Woche)
- Überstunden-Offset für historische Daten
- Fixed Layout mit scrollbarem Content
- Kompakte UI mit grünem Theme
This commit is contained in:
Torsten Schulz (local)
2025-10-17 14:11:28 +02:00
commit e95bb4cb76
86 changed files with 19530 additions and 0 deletions

248
backend/MYSQL_SETUP.md Normal file
View File

@@ -0,0 +1,248 @@
# 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
```