#!/usr/bin/env bash
# Judicial Monitor — PostgreSQL backup
#
# Dumps the `judicial` database into /opt/backups/db_YYYY-MM-DD.sql.gz and
# deletes any dump older than 7 days. Intended to run via host cron:
#
#   0 2 * * * /opt/judicial/infra/backup.sh >> /var/log/judicial-backup.log 2>&1
#
set -euo pipefail

PROJECT_DIR="/opt/judicial"
OUT_DIR="/opt/backups"
RETENTION_DAYS=7

mkdir -p "$OUT_DIR"
cd "$PROJECT_DIR"

TODAY=$(date -u +%Y-%m-%d)
OUT_FILE="$OUT_DIR/db_$TODAY.sql.gz"

if [ -f "$PROJECT_DIR/.env" ]; then
    # shellcheck disable=SC2046
    export $(grep -E '^(POSTGRES_USER|POSTGRES_DB)=' "$PROJECT_DIR/.env" | xargs)
fi
PG_USER="${POSTGRES_USER:-judicial}"
PG_DB="${POSTGRES_DB:-judicial}"

docker compose exec -T postgres pg_dump -U "$PG_USER" -d "$PG_DB" \
    | gzip -9 > "$OUT_FILE"

find "$OUT_DIR" -name "db_*.sql.gz" -type f -mtime "+$RETENTION_DAYS" -delete

echo "[$(date -Iseconds)] backup ok: $OUT_FILE ($(du -h "$OUT_FILE" | cut -f1))"
