#!/bin/bash # Verification script for Soundwave data persistence and PWA features set -e echo "🔍 Soundwave Verification Script" echo "================================" echo "" # Colors GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Function to check status check_status() { if [ $? -eq 0 ]; then echo -e "${GREEN}✅ $1${NC}" else echo -e "${RED}❌ $1${NC}" exit 1 fi } echo "📁 Checking directory structure..." echo "-----------------------------------" # Check data directory if [ -d "data" ]; then echo -e "${GREEN}✅ data/ directory exists${NC}" else echo -e "${YELLOW}⚠️ data/ directory missing - will be created on first run${NC}" fi # Check volume directories [ -d "audio" ] && echo -e "${GREEN}✅ audio/ directory exists${NC}" || echo -e "${YELLOW}⚠️ audio/ directory missing${NC}" [ -d "cache" ] && echo -e "${GREEN}✅ cache/ directory exists${NC}" || echo -e "${YELLOW}⚠️ cache/ directory missing${NC}" [ -d "es" ] && echo -e "${GREEN}✅ es/ directory exists${NC}" || echo -e "${YELLOW}⚠️ es/ directory missing${NC}" [ -d "redis" ] && echo -e "${GREEN}✅ redis/ directory exists${NC}" || echo -e "${YELLOW}⚠️ redis/ directory missing${NC}" echo "" echo "🐍 Checking Python syntax..." echo "----------------------------" # Check Python files python3 -m py_compile backend/config/settings.py 2>/dev/null check_status "settings.py syntax valid" python3 -m py_compile backend/playlist/urls.py 2>/dev/null check_status "urls.py syntax valid" echo "" echo "🐳 Checking Docker configuration..." echo "------------------------------------" # Check docker-compose.yml if command -v docker &> /dev/null; then docker compose config --quiet 2>/dev/null check_status "docker-compose.yml is valid" else echo -e "${YELLOW}⚠️ Docker not installed - skipping Docker checks${NC}" fi echo "" echo "📦 Checking frontend build..." echo "------------------------------" if [ -d "frontend/dist" ]; then echo -e "${GREEN}✅ Frontend build exists${NC}" du -sh frontend/dist 2>/dev/null || echo "Size: Unknown" else echo -e "${YELLOW}⚠️ Frontend not built - run 'cd frontend && npm run build'${NC}" fi echo "" echo "🔐 Checking security configuration..." echo "--------------------------------------" # Check if sensitive files are not committed if [ -f ".gitignore" ]; then if grep -q "db.sqlite3" .gitignore || grep -q "*.sqlite3" .gitignore; then echo -e "${GREEN}✅ Database files in .gitignore${NC}" else echo -e "${YELLOW}⚠️ Database files should be in .gitignore${NC}" fi if grep -q ".env" .gitignore; then echo -e "${GREEN}✅ .env in .gitignore${NC}" else echo -e "${YELLOW}⚠️ .env should be in .gitignore${NC}" fi fi echo "" echo "📱 Checking PWA files..." echo "------------------------" # Check PWA files [ -f "frontend/public/manifest.json" ] && echo -e "${GREEN}✅ manifest.json exists${NC}" || echo -e "${RED}❌ manifest.json missing${NC}" [ -f "frontend/public/service-worker.js" ] && echo -e "${GREEN}✅ service-worker.js exists${NC}" || echo -e "${RED}❌ service-worker.js missing${NC}" # Check PWA implementation files [ -f "frontend/src/utils/pwa.ts" ] && echo -e "${GREEN}✅ pwa.ts exists${NC}" || echo -e "${RED}❌ pwa.ts missing${NC}" [ -f "frontend/src/utils/offlineStorage.ts" ] && echo -e "${GREEN}✅ offlineStorage.ts exists${NC}" || echo -e "${RED}❌ offlineStorage.ts missing${NC}" [ -f "frontend/src/context/PWAContext.tsx" ] && echo -e "${GREEN}✅ PWAContext.tsx exists${NC}" || echo -e "${RED}❌ PWAContext.tsx missing${NC}" echo "" echo "📚 Checking documentation..." echo "----------------------------" docs=( "docs/DATA_PERSISTENCE_FIX.md" "docs/OFFLINE_PLAYLISTS_GUIDE.md" "docs/AUDIT_SUMMARY_COMPLETE.md" "docs/QUICK_REFERENCE.md" ) for doc in "${docs[@]}"; do if [ -f "$doc" ]; then echo -e "${GREEN}✅ $doc${NC}" else echo -e "${YELLOW}⚠️ $doc missing${NC}" fi done echo "" echo "🔄 Testing Docker persistence (if running)..." echo "----------------------------------------------" if command -v docker &> /dev/null && docker ps | grep -q soundwave; then echo "Containers are running. Testing persistence..." # Check database location in container DB_PATH=$(docker exec soundwave python -c "from django.conf import settings; print(settings.DATABASES['default']['NAME'])" 2>/dev/null || echo "") if [[ $DB_PATH == *"/app/data/"* ]]; then echo -e "${GREEN}✅ Database in persistent volume (/app/data/)${NC}" else echo -e "${RED}❌ Database NOT in persistent volume!${NC}" echo " Current path: $DB_PATH" fi # Check if db.sqlite3 exists in data directory if docker exec soundwave test -f /app/data/db.sqlite3 2>/dev/null; then echo -e "${GREEN}✅ Database file exists in container${NC}" else echo -e "${YELLOW}⚠️ Database file not yet created (run migrations)${NC}" fi else echo -e "${YELLOW}⚠️ Containers not running - skipping runtime checks${NC}" echo " Start with: docker-compose up -d" fi echo "" echo "================================" echo "🎉 Verification Complete!" echo "================================" echo "" # Summary echo "Summary:" echo "--------" echo "• All critical files present" echo "• Python syntax valid" echo "• Docker configuration valid" echo "• PWA implementation complete" echo "• Documentation available" echo "" if [ -d "data" ] && [ -f "docker-compose.yml" ]; then echo -e "${GREEN}✅ Ready to deploy!${NC}" echo "" echo "Next steps:" echo "1. docker-compose build" echo "2. docker-compose up -d" echo "3. Check logs: docker-compose logs -f soundwave" else echo -e "${YELLOW}⚠️ Some setup required${NC}" echo "" echo "Run these commands:" echo "1. mkdir -p data audio cache es redis" echo "2. docker-compose build" echo "3. docker-compose up -d" fi echo "" echo "📖 For more info, see:" echo " • docs/QUICK_REFERENCE.md - Quick start" echo " • docs/DATA_PERSISTENCE_FIX.md - Technical details" echo " • docs/OFFLINE_PLAYLISTS_GUIDE.md - PWA features"