123 lines
4.8 KiB
Bash
123 lines
4.8 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# Life OS - Step 1: DEV Database Setup
|
|
# Applies R1 schema to lifeos_dev, migrates data from lifeos_prod (R0)
|
|
# Run on: defiant-01 as root
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
DB_CONTAINER="lifeos-db"
|
|
DB_USER="postgres"
|
|
DEV_DB="lifeos_dev"
|
|
PROD_DB="lifeos_prod"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
section() {
|
|
echo ""
|
|
echo "=============================================="
|
|
echo " $1"
|
|
echo "=============================================="
|
|
}
|
|
|
|
# =============================================================================
|
|
# 1. Verify prerequisites
|
|
# =============================================================================
|
|
section "1. Verifying prerequisites"
|
|
|
|
echo "Checking lifeos-db container..."
|
|
if ! docker ps | grep -q "$DB_CONTAINER"; then
|
|
echo "ERROR: $DB_CONTAINER is not running"
|
|
exit 1
|
|
fi
|
|
echo "OK: $DB_CONTAINER is running"
|
|
|
|
echo "Checking lifeos_dev database exists..."
|
|
DEV_EXISTS=$(docker exec $DB_CONTAINER psql -U $DB_USER -tc "SELECT 1 FROM pg_database WHERE datname='$DEV_DB'" | tr -d ' ')
|
|
if [ "$DEV_EXISTS" != "1" ]; then
|
|
echo "ERROR: $DEV_DB database does not exist"
|
|
exit 1
|
|
fi
|
|
echo "OK: $DEV_DB exists"
|
|
|
|
echo "Checking lifeos_prod database exists..."
|
|
PROD_EXISTS=$(docker exec $DB_CONTAINER psql -U $DB_USER -tc "SELECT 1 FROM pg_database WHERE datname='$PROD_DB'" | tr -d ' ')
|
|
if [ "$PROD_EXISTS" != "1" ]; then
|
|
echo "ERROR: $PROD_DB database does not exist"
|
|
exit 1
|
|
fi
|
|
echo "OK: $PROD_DB exists"
|
|
|
|
echo "Checking R0 data in lifeos_prod..."
|
|
R0_DOMAINS=$(docker exec $DB_CONTAINER psql -U $DB_USER -d $PROD_DB -tc "SELECT count(*) FROM domains" 2>/dev/null | tr -d ' ')
|
|
echo "R0 domains count: $R0_DOMAINS"
|
|
if [ "$R0_DOMAINS" = "0" ] || [ -z "$R0_DOMAINS" ]; then
|
|
echo "WARNING: No domains found in lifeos_prod. Migration will produce empty tables."
|
|
fi
|
|
|
|
# =============================================================================
|
|
# 2. Drop existing R1 tables in lifeos_dev (clean slate)
|
|
# =============================================================================
|
|
section "2. Cleaning lifeos_dev (drop all tables)"
|
|
|
|
docker exec $DB_CONTAINER psql -U $DB_USER -d $DEV_DB -c "
|
|
DROP SCHEMA public CASCADE;
|
|
CREATE SCHEMA public;
|
|
GRANT ALL ON SCHEMA public TO $DB_USER;
|
|
GRANT ALL ON SCHEMA public TO public;
|
|
"
|
|
echo "OK: lifeos_dev schema reset"
|
|
|
|
# =============================================================================
|
|
# 3. Apply R1 schema
|
|
# =============================================================================
|
|
section "3. Applying R1 schema to lifeos_dev"
|
|
|
|
docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DEV_DB < "$SCRIPT_DIR/lifeos_r1_full_schema.sql"
|
|
echo "OK: R1 schema applied"
|
|
|
|
# Verify table count
|
|
TABLE_COUNT=$(docker exec $DB_CONTAINER psql -U $DB_USER -d $DEV_DB -tc "
|
|
SELECT count(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'
|
|
" | tr -d ' ')
|
|
echo "Tables created: $TABLE_COUNT"
|
|
|
|
# =============================================================================
|
|
# 4. Run data migration (R0 -> R1)
|
|
# =============================================================================
|
|
section "4. Migrating data from lifeos_prod (R0) to lifeos_dev (R1)"
|
|
|
|
docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DEV_DB < "$SCRIPT_DIR/lifeos_r0_to_r1_migration.sql"
|
|
echo "OK: Data migration complete"
|
|
|
|
# =============================================================================
|
|
# 5. Final verification
|
|
# =============================================================================
|
|
section "5. Final verification"
|
|
|
|
echo "R1 table row counts:"
|
|
docker exec $DB_CONTAINER psql -U $DB_USER -d $DEV_DB -c "
|
|
SELECT 'domains' as table_name, count(*) FROM domains UNION ALL
|
|
SELECT 'areas', count(*) FROM areas UNION ALL
|
|
SELECT 'projects', count(*) FROM projects UNION ALL
|
|
SELECT 'tasks', count(*) FROM tasks UNION ALL
|
|
SELECT 'notes', count(*) FROM notes UNION ALL
|
|
SELECT 'links', count(*) FROM links UNION ALL
|
|
SELECT 'daily_focus', count(*) FROM daily_focus UNION ALL
|
|
SELECT 'capture', count(*) FROM capture UNION ALL
|
|
SELECT 'context_types', count(*) FROM context_types UNION ALL
|
|
SELECT 'contacts', count(*) FROM contacts UNION ALL
|
|
SELECT 'meetings', count(*) FROM meetings UNION ALL
|
|
SELECT 'decisions', count(*) FROM decisions UNION ALL
|
|
SELECT 'releases', count(*) FROM releases UNION ALL
|
|
SELECT 'processes', count(*) FROM processes
|
|
ORDER BY table_name;
|
|
"
|
|
|
|
echo ""
|
|
echo "=============================================="
|
|
echo " DEV database setup complete."
|
|
echo " lifeos_dev has R1 schema + migrated R0 data."
|
|
echo " lifeos_prod R0 data is UNTOUCHED."
|
|
echo "=============================================="
|