46 lines
1.5 KiB
Bash
Executable File
46 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ "$ENV" == "production" ]; then
|
|
DB_FILE="/data/finance.db"
|
|
else
|
|
DB_FILE="./finance.db"
|
|
fi
|
|
HISTORY_TABLE="finance_history"
|
|
# Current date in the format you've been using
|
|
DATE_STR=$(date +%Y-%m-%d)
|
|
|
|
# 1. Identify which table exists (finance or finance_data)
|
|
SRC_TABLE=finance
|
|
|
|
if [ -z "$SRC_TABLE" ]; then
|
|
echo "Error: Source table not found."
|
|
exit 1
|
|
fi
|
|
|
|
# 2. Get columns dynamically (excluding 'id')
|
|
COLS=$(sqlite3 "$DB_FILE" "PRAGMA table_info($SRC_TABLE);" | cut -d'|' -f2 | grep -v '^id$' | xargs | tr ' ' ',')
|
|
|
|
# 3. Change Detection Logic
|
|
# We grab the latest row from history and compare it to the current source data
|
|
CURRENT_VALS=$(sqlite3 "$DB_FILE" "SELECT $COLS FROM $SRC_TABLE ORDER BY id DESC LIMIT 1;")
|
|
LAST_VALS=$(sqlite3 "$DB_FILE" "SELECT $COLS FROM $HISTORY_TABLE ORDER BY snapshot_date DESC LIMIT 1;")
|
|
|
|
if [ "$CURRENT_VALS" == "$LAST_VALS" ]; then
|
|
echo "Data identical to last snapshot ($DATE_STR). Skipping."
|
|
exit 0
|
|
fi
|
|
|
|
# 4. Auto-Migration
|
|
# Ensure any new columns in 'finance' also exist in 'finance_history'
|
|
for col in ${COLS//,/ }; do
|
|
sqlite3 "$DB_FILE" "ALTER TABLE $HISTORY_TABLE ADD COLUMN $col NUMERIC;" 2>/dev/null
|
|
done
|
|
|
|
# 5. The Snapshot Insert
|
|
# INSERT OR IGNORE ensures that if Docker restarts today, we don't duplicate the row.
|
|
echo "Changes detected. Recording snapshot for $DATE_STR..."
|
|
sqlite3 "$DB_FILE" <<EOF
|
|
INSERT OR IGNORE INTO $HISTORY_TABLE (snapshot_date, $COLS)
|
|
SELECT '$DATE_STR', $COLS FROM $SRC_TABLE ORDER BY id DESC LIMIT 1;
|
|
EOF
|