#!/usr/bin/env bash
# houday-assist PostgreSQL 日次バックアップ(7世代保持)。
#
# 回答データの消失は信頼失墜に直結するため必須(REQUIREMENTS §7)。
#
# cron 登録例(app ユーザーの crontab -e に追記。毎日 3:15):
#   15 3 * * * /opt/houday-assist/deploy/backup.sh >> /var/log/houday-backup.log 2>&1
#
# 前提: .env に DATABASE_URL があること。pg_dump がインストール済みであること。

set -euo pipefail

APP_DIR="/opt/houday-assist"
BACKUP_DIR="/var/backups/houday-assist"
KEEP=7

mkdir -p "$BACKUP_DIR"

# .env から DATABASE_URL を読む(他の変数は展開しない)
DATABASE_URL="$(grep -E '^DATABASE_URL=' "$APP_DIR/.env" | head -n1 | cut -d= -f2- | tr -d '"')"
if [ -z "${DATABASE_URL:-}" ]; then
  echo "[backup] DATABASE_URL が取得できません" >&2
  exit 1
fi

STAMP="$(date +%Y%m%d_%H%M%S)"
OUT="$BACKUP_DIR/houday_${STAMP}.sql.gz"

# pg_dump は接続文字列をそのまま受け取れる
pg_dump "$DATABASE_URL" | gzip > "$OUT"
echo "[backup] 作成: $OUT ($(du -h "$OUT" | cut -f1))"

# 7世代を超える古いバックアップを削除
ls -1t "$BACKUP_DIR"/houday_*.sql.gz | tail -n +$((KEEP + 1)) | while read -r old; do
  rm -f "$old"
  echo "[backup] 削除: $old"
done
