#!/usr/bin/env bash # # Restore-Script: spielt Phase 2 + Offers-Änderungen zurück in den Workspace. # Voraussetzung: Phase 1 wurde erfolgreich auf Live deployed und migriert. # # Nutzung: # bash dev/backups/phase2-offers-2026-04-17/restore.sh # interaktiv # bash dev/backups/phase2-offers-2026-04-17/restore.sh --force # ohne Nachfrage # # Details siehe MANIFEST.md im selben Verzeichnis. set -euo pipefail BACKUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${BACKUP_DIR}/../../../" && pwd)" FORCE=false for arg in "$@"; do case "$arg" in --force|-f) FORCE=true ;; *) echo "Unbekannte Option: $arg"; exit 1 ;; esac done cd "${PROJECT_ROOT}" echo "==========================================" echo " Phase-2 + Offers Restore" echo "==========================================" echo echo " Projekt-Root: ${PROJECT_ROOT}" echo " Backup-Ordner: ${BACKUP_DIR}" echo echo " Folgende Änderungen werden zurückgespielt:" echo " - 18 Migrationen (Phase 2, 3, 4, Offers) nach database/migrations/" echo " - 6 Offer-Models nach app/Models/ (inkl. Überschreiben von Legacy-Offer.php)" echo " - Code-Reverts via git checkout \${WIP_COMMIT} -- " echo WIP_COMMIT="e3dc1af" if ! git cat-file -e "${WIP_COMMIT}" 2>/dev/null; then echo "FEHLER: Commit ${WIP_COMMIT} existiert nicht in diesem Repo." echo " Wenn das Repo neu geklont wurde, musst du stattdessen manuell" echo " die Dateien aus dem Tarball wiederherstellen." echo " Siehe MANIFEST.md → Abschnitt 'Manuell'." exit 2 fi if ! ${FORCE}; then echo read -r -p " Wurde Phase 1 auf Live erfolgreich deployed und migriert? (yes/NO): " answer if [[ "${answer}" != "yes" ]]; then echo " Abbruch. Bitte erst Phase 1 auf Live einspielen." exit 3 fi echo read -r -p " Trotzdem fortfahren? (yes/NO): " confirm if [[ "${confirm}" != "yes" ]]; then echo " Abbruch durch User." exit 3 fi fi echo echo "--- 1/4 --- Migrationen zurückspielen" cp -v "${BACKUP_DIR}/FILES/migrations/"*.php database/migrations/ echo " → $(ls "${BACKUP_DIR}/FILES/migrations/" | wc -l) Migrationen kopiert" echo echo "--- 2/4 --- Offer-Models zurückspielen" cp -v "${BACKUP_DIR}/FILES/models/"*.php app/Models/ echo " → 6 Models kopiert (inkl. Überschreiben Legacy-Offer.php)" echo echo "--- 3/4 --- Code-Reverts aus Git-Commit ${WIP_COMMIT}" FILES_TO_RESTORE=( "app/Models/Booking.php" "app/Models/Customer.php" "app/Models/Contact.php" "app/Models/Lead.php" "app/Repositories/BookingPDFRepository.php" "app/Repositories/LeadRepository.php" "app/Repositories/CustomerMailRepository.php" "app/Http/Controllers/RequestController.php" "app/Http/Controllers/API/BookingController.php" "app/Http/Controllers/Admin/ReportController.php" "app/Http/Controllers/Admin/ReportProviderController.php" "app/Http/Controllers/Admin/ReportLeadsController.php" "app/Http/Controllers/LeadController.php" "app/Http/Controllers/CustomerController.php" "app/Http/Controllers/ContactController.php" "app/Services/BookingImport.php" "app/Console/Commands/SyncNewsletterKulturreisen.php" "app/Console/Commands/ContactsFindDuplicates.php" "app/Console/Commands/ContactsMergeDuplicates.php" "resources/views/customer/mail/modal-show-mail-inner.blade.php" "resources/views/pdf/components/booking_head.blade.php" "resources/views/pdf/components/booking_header.blade.php" "config/filesystems.php" ) for f in "${FILES_TO_RESTORE[@]}"; do git checkout "${WIP_COMMIT}" -- "${f}" echo " ↺ ${f}" done echo echo "--- 4/4 --- Verifikation" echo echo " git status (sollte Phase-2 + Offers-Dateien als modifiziert zeigen):" git status --short | head -40 echo echo " Verbliebene Phase-2-Marker im Code (sollten nun wieder da sein):" PHASE2_HITS=$(grep -rn "inquiry_id" app/ 2>/dev/null | head -5 || true) if [[ -n "${PHASE2_HITS}" ]]; then echo "${PHASE2_HITS}" echo " → OK, Phase-2-Code ist wieder aktiv." else echo " (keine gefunden — Restore eventuell nicht vollständig)" fi echo echo "==========================================" echo " Restore abgeschlossen." echo "==========================================" echo echo " Nächste Schritte:" echo " 1. php -l auf allen geänderten Dateien (Syntax-Check)" echo " 2. composer dump-autoload (neue Models registrieren)" echo " 3. Weiterarbeit an Phase 2 + Offers nach Plan" echo " 4. Phase-2-Migrationen ausführen:" echo " php artisan migrate --path=database/migrations/2025_04_15_200001_phase2_rename_customer_to_contacts.php" echo " php artisan migrate --path=database/migrations/2025_04_15_200002_phase2_rename_lead_to_inquiries.php" echo " php artisan migrate --path=database/migrations/2025_04_15_200003_phase2_rename_booking_lead_id_to_inquiry_id.php" echo