#!/bin/sh
# backup.sh — sichert die Supabase-Übungsinstanz in /opt/supabase/backups/<Zeitpunkt>/
#
#   sh backup.sh              # im laufenden Betrieb: Dump Deiner Tabellen (Schema public)
#   sh backup.sh --komplett   # hält Supabase kurz an und sichert alles: Datenbankdateien,
#                             # Storage-Dateien, Funktionen, .env und das Volume db-config
#
# Der Dump reicht, um eine versehentlich gelöschte Tabelle zurückzuholen.
# Vor einem Update braucht es die komplette Sicherung, sonst gibt es keinen Rückweg.
set -eu
cd /opt/supabase
ZIEL="backups/$(date +%Y-%m-%d-%H%M)"
mkdir -p "$ZIEL"

docker exec supabase-db pg_dump -U postgres -d postgres -n public -Fc > "$ZIEL/public.dump"
echo "Dump: $ZIEL/public.dump ($(du -h "$ZIEL/public.dump" | cut -f1))"

if [ "${1:-}" = "--komplett" ]; then
  sh run.sh stop
  tar czf "$ZIEL/volumes.tar.gz" volumes
  docker run --rm -v supabase_db-config:/quelle:ro -v "$PWD/$ZIEL":/ziel alpine \
    tar czf /ziel/db-config.tar.gz -C /quelle .
  cp .env "$ZIEL/env.sicherung"
  sh run.sh start
  echo "Komplett: $ZIEL ($(du -sh "$ZIEL" | cut -f1))"
fi
chmod -R go-rwx backups
