20-02-2026
This commit is contained in:
parent
a8b395e20d
commit
a00c42e770
252 changed files with 28785 additions and 8907 deletions
366
dev/2026-01-28/BUSINESS_FORCE_EXECUTE.md
Normal file
366
dev/2026-01-28/BUSINESS_FORCE_EXECUTE.md
Normal file
|
|
@ -0,0 +1,366 @@
|
|||
# BUSINESS_FORCE_EXECUTE - Test-Server Konfiguration
|
||||
|
||||
## Übersicht
|
||||
|
||||
Die ENV-Variable `BUSINESS_FORCE_EXECUTE` erlaubt es, die Business-Commands auch an Tagen auszuführen, die nicht dem konfigurierten Ausführungstag entsprechen.
|
||||
|
||||
**⚠️ WICHTIG:** Diese Variable sollte **NUR auf Test-Servern** verwendet werden!
|
||||
|
||||
---
|
||||
|
||||
## Verwendung
|
||||
|
||||
### Auf Test-Server aktivieren
|
||||
|
||||
**1. .env Datei bearbeiten:**
|
||||
|
||||
```bash
|
||||
# In .env Datei hinzufügen:
|
||||
BUSINESS_FORCE_EXECUTE=true
|
||||
```
|
||||
|
||||
**2. Commands testen:**
|
||||
|
||||
```bash
|
||||
# Command kann jetzt an jedem Tag ausgeführt werden
|
||||
php artisan business:store-optimized 0 0
|
||||
|
||||
# Erwartete Ausgabe:
|
||||
# ⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
|
||||
# ⚠️ Dies sollte NUR auf Test-Servern verwendet werden!
|
||||
# ✅ Command wird ausgeführt...
|
||||
```
|
||||
|
||||
### Auf Live-Server DEAKTIVIEREN
|
||||
|
||||
**In .env Datei auf Live-Server:**
|
||||
|
||||
```bash
|
||||
# NICHT setzen oder explizit auf false:
|
||||
# BUSINESS_FORCE_EXECUTE=false
|
||||
|
||||
# Oder ganz weglassen (Standard ist false)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Vorteile der neuen Lösung
|
||||
|
||||
### ✅ Vor dem Fix (mit auskommentiertem return)
|
||||
|
||||
**Problem:**
|
||||
|
||||
```php
|
||||
if ($executeDay !== $presentDay) {
|
||||
$this->info('NOT RUN ...');
|
||||
// return 0; // ← Auskommentiert während Entwicklung
|
||||
}
|
||||
// ❌ Command läuft weiter, auch wenn er nicht sollte!
|
||||
```
|
||||
|
||||
**Nachteile:**
|
||||
|
||||
- Entwickler vergisst Kommentar zu entfernen
|
||||
- Command läuft versehentlich auf Live-Server
|
||||
- Git-Commit enthält auskommentiertes return
|
||||
- Schwer zu debuggen
|
||||
|
||||
### ✅ Nach dem Fix (mit ENV-Variable)
|
||||
|
||||
**Lösung:**
|
||||
|
||||
```php
|
||||
private function shouldExecuteToday(): bool
|
||||
{
|
||||
$executeDay = (int) Setting::getContentBySlug('day-exectute-business-structur');
|
||||
$presentDay = (int) date('d');
|
||||
|
||||
if ($executeDay !== $presentDay) {
|
||||
// Überschreibung NUR mit ENV-Variable möglich
|
||||
if (env('BUSINESS_FORCE_EXECUTE', false) === true) {
|
||||
$this->warn("⚠️ BUSINESS_FORCE_EXECUTE ist aktiv!");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false; // ← IMMER hier, kann nicht auskommentiert werden
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
**Vorteile:**
|
||||
|
||||
- ✅ Kein Code muss auskommentiert werden
|
||||
- ✅ Funktioniert sofort auf Test-Server (mit ENV)
|
||||
- ✅ Sicher auf Live-Server (ohne ENV)
|
||||
- ✅ Klare Warnungen wenn Force aktiv ist
|
||||
- ✅ Besseres Logging
|
||||
- ✅ Fallback wenn Setting leer ist
|
||||
|
||||
---
|
||||
|
||||
## Zusätzliche Features
|
||||
|
||||
### 1. Automatischer Fallback
|
||||
|
||||
Wenn das Setting `day-exectute-business-structur` leer ist:
|
||||
|
||||
```php
|
||||
if ($executeDay === 0) {
|
||||
$executeDay = 1; // Standard: Tag 1
|
||||
$this->warn('Setting ist leer - verwende Standard: Tag 1');
|
||||
}
|
||||
```
|
||||
|
||||
**Vorteil:** Command funktioniert auch wenn Setting vergessen wurde zu setzen.
|
||||
|
||||
### 2. Besseres Logging
|
||||
|
||||
```
|
||||
[2026-01-28 03:00:02] BusinessStoreOptimized: Configured Day: 1, Present Day: 28
|
||||
[2026-01-28 03:00:02] BusinessStoreOptimized: NOT EXECUTED - wrong day (expected: 1, today: 28)
|
||||
```
|
||||
|
||||
**Vorteil:** Klar erkennbar warum Command nicht läuft.
|
||||
|
||||
### 3. Visuelle Warnungen
|
||||
|
||||
Wenn `BUSINESS_FORCE_EXECUTE=true`:
|
||||
|
||||
```
|
||||
⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
|
||||
⚠️ Dies sollte NUR auf Test-Servern verwendet werden!
|
||||
```
|
||||
|
||||
**Vorteil:** Entwickler sieht sofort, dass Force-Mode aktiv ist.
|
||||
|
||||
---
|
||||
|
||||
## Test-Szenarien
|
||||
|
||||
### Szenario 1: Test-Server - Entwicklung
|
||||
|
||||
```bash
|
||||
# .env
|
||||
BUSINESS_FORCE_EXECUTE=true
|
||||
|
||||
# Command kann jederzeit ausgeführt werden
|
||||
php artisan business:store-optimized 12 2025
|
||||
php artisan business:store-optimized 0 0
|
||||
|
||||
# ✅ Läuft ohne Probleme
|
||||
```
|
||||
|
||||
### Szenario 2: Live-Server - Normalbetrieb
|
||||
|
||||
```bash
|
||||
# .env
|
||||
# BUSINESS_FORCE_EXECUTE nicht gesetzt (oder =false)
|
||||
|
||||
# Scheduler ruft täglich auf:
|
||||
# php artisan business:store-optimized 0 0
|
||||
|
||||
# Nur am Tag 1 wird tatsächlich ausgeführt:
|
||||
# 01.02.2026 03:00 → ✅ EXECUTED
|
||||
# 02.02.2026 03:00 → ❌ NOT EXECUTED
|
||||
# 03.02.2026 03:00 → ❌ NOT EXECUTED
|
||||
# ...
|
||||
# 01.03.2026 03:00 → ✅ EXECUTED
|
||||
```
|
||||
|
||||
### Szenario 3: Live-Server - Manuelle Ausführung
|
||||
|
||||
```bash
|
||||
# Admin muss manuell für alten Monat ausführen
|
||||
php artisan business:store-optimized 11 2025 --clear
|
||||
|
||||
# Funktioniert jederzeit, da spezifische Parameter
|
||||
# (nicht 0 0, daher kein Vormonat-Check)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Migration Guide
|
||||
|
||||
### Schritt 1: Test-Server
|
||||
|
||||
```bash
|
||||
# 1. Code aktualisieren (Git pull)
|
||||
git pull origin main
|
||||
|
||||
# 2. ENV-Variable setzen
|
||||
echo "BUSINESS_FORCE_EXECUTE=true" >> .env
|
||||
|
||||
# 3. Testen
|
||||
php artisan business:store-optimized 0 0
|
||||
|
||||
# Erwartete Ausgabe:
|
||||
# ⚠️ BUSINESS_FORCE_EXECUTE ist aktiv...
|
||||
# ✅ Command wird ausgeführt
|
||||
```
|
||||
|
||||
### Schritt 2: Live-Server
|
||||
|
||||
```bash
|
||||
# 1. Backup erstellen
|
||||
php artisan backup:run
|
||||
|
||||
# 2. Code aktualisieren
|
||||
cd /home/ploi/mivita.care
|
||||
git pull origin main
|
||||
|
||||
# 3. ENV prüfen (NICHT setzen!)
|
||||
grep BUSINESS_FORCE_EXECUTE .env
|
||||
# Sollte NICHTS finden oder =false
|
||||
|
||||
# 4. Cache leeren
|
||||
php8.4 artisan config:clear
|
||||
php8.4 artisan cache:clear
|
||||
|
||||
# 5. Testen (falscher Tag)
|
||||
php8.4 artisan business:store-optimized 0 0
|
||||
|
||||
# Erwartete Ausgabe:
|
||||
# ❌ Command wird NICHT ausgeführt - falscher Tag
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Problem: Command läuft auf Live nicht mehr
|
||||
|
||||
**Symptom:**
|
||||
|
||||
```
|
||||
❌ Command wird NICHT ausgeführt - falscher Tag (erwartet: 1, heute: 28)
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
|
||||
- Das ist **korrekt**! Command sollte nur am Tag 1 laufen
|
||||
- Warte bis zum 1. des nächsten Monats
|
||||
- Oder führe manuell aus: `php artisan business:store-optimized 12 2025`
|
||||
|
||||
### Problem: Setting ist leer
|
||||
|
||||
**Symptom:**
|
||||
|
||||
```
|
||||
Setting "day-exectute-business-structur" ist leer oder 0. Verwende Standard: Tag 1
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
|
||||
```bash
|
||||
php artisan tinker --execute="
|
||||
\$setting = \App\Models\Setting::where('slug', 'day-exectute-business-structur')->first();
|
||||
if (!\$setting) {
|
||||
\$setting = new \App\Models\Setting();
|
||||
\$setting->slug = 'day-exectute-business-structur';
|
||||
}
|
||||
\$setting->content = '1';
|
||||
\$setting->save();
|
||||
echo 'Setting updated to: 1\n';
|
||||
"
|
||||
```
|
||||
|
||||
### Problem: FORCE_EXECUTE auf Live aktiv
|
||||
|
||||
**Symptom:**
|
||||
|
||||
```
|
||||
⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
|
||||
```bash
|
||||
# .env Datei bearbeiten
|
||||
nano .env
|
||||
|
||||
# Zeile entfernen oder auf false setzen:
|
||||
BUSINESS_FORCE_EXECUTE=false
|
||||
|
||||
# Cache leeren
|
||||
php artisan config:clear
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### ✅ DO
|
||||
|
||||
- ENV-Variable NUR auf Test-Servern setzen
|
||||
- Klare Dokumentation in .env.example
|
||||
- Logs regelmäßig prüfen
|
||||
- Cache nach ENV-Änderungen leeren
|
||||
|
||||
### ❌ DON'T
|
||||
|
||||
- NIEMALS auf Live-Server `BUSINESS_FORCE_EXECUTE=true` setzen
|
||||
- Kein Code-Auskommentieren mehr für Tests
|
||||
- Keine manuellen Scheduler-Anpassungen für Tests
|
||||
- Nicht vergessen Setting zu setzen (day-exectute-business-structur)
|
||||
|
||||
---
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
| Aspekt | Alt (mit Kommentar) | Neu (mit ENV) |
|
||||
| --------------- | -------------------- | ------------------------- |
|
||||
| **Test-Server** | Code auskommentieren | ENV-Variable setzen |
|
||||
| **Live-Server** | Kommentar vergessen | ENV nicht setzen (sicher) |
|
||||
| **Sicherheit** | ❌ Fehleranfällig | ✅ Sicher |
|
||||
| **Wartbarkeit** | ❌ Schwierig | ✅ Einfach |
|
||||
| **Logging** | ⚠️ Basic | ✅ Ausführlich |
|
||||
| **Fallback** | ❌ Kein | ✅ Automatisch |
|
||||
|
||||
---
|
||||
|
||||
## Weitere Verbesserungen (optional)
|
||||
|
||||
### Idee 1: Command mit --force Flag
|
||||
|
||||
```php
|
||||
protected $signature = 'business:store-optimized {month} {year} {--clear} {--force}';
|
||||
|
||||
if ($this->option('force')) {
|
||||
$this->warn('--force Flag aktiv - Tag-Check wird übersprungen');
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
### Idee 2: Notification bei Force-Ausführung
|
||||
|
||||
```php
|
||||
if (env('BUSINESS_FORCE_EXECUTE', false) === true) {
|
||||
\Mail::to('admin@mivita.care')->send(
|
||||
new \App\Mail\BusinessForcedExecutionMail()
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Idee 3: Test-Modus in UI anzeigen
|
||||
|
||||
```php
|
||||
// In Layout-Header
|
||||
@if(env('BUSINESS_FORCE_EXECUTE', false))
|
||||
<div class="alert alert-warning">
|
||||
⚠️ TEST-MODUS: Business-Commands laufen mit FORCE_EXECUTE
|
||||
</div>
|
||||
@endif
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen:
|
||||
|
||||
1. Logs prüfen: `storage/logs/laravel.log`
|
||||
2. ENV-Variable prüfen: `php artisan config:show`
|
||||
3. Setting prüfen: `php artisan tinker` → `Setting::where('slug', 'day-exectute-business-structur')->first()`
|
||||
4. Dokumentation: `/dev/28-01-2026/business-store-timing-fix.md`
|
||||
Loading…
Add table
Add a link
Reference in a new issue