157 lines
5.9 KiB
Bash
Executable File
157 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# =================================================================
|
|
# DATABASE SCHEMA AND DATA VERIFICATION SCRIPT
|
|
# =================================================================
|
|
# This script checks the auth database schema and data
|
|
|
|
echo "🔍 DATABASE VERIFICATION"
|
|
echo "========================"
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Check if auth database container is running
|
|
if ! docker ps | grep -q "bakery-auth-db"; then
|
|
echo -e "${RED}❌ Auth database container is not running${NC}"
|
|
echo "Start with: docker-compose up -d auth-db"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ Auth database container is running${NC}"
|
|
echo ""
|
|
|
|
# 1. Check database schema
|
|
echo "📋 1. CHECKING DATABASE SCHEMA"
|
|
echo "=============================="
|
|
|
|
echo "Users table structure:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "\d users;" 2>/dev/null || {
|
|
echo -e "${RED}❌ Cannot access database or users table doesn't exist${NC}"
|
|
exit 1
|
|
}
|
|
|
|
echo ""
|
|
echo "Checking if 'role' column exists:"
|
|
ROLE_COLUMN=$(docker exec bakery-auth-db psql -U auth_user -d auth_db -t -c "SELECT column_name FROM information_schema.columns WHERE table_name='users' AND column_name='role';" 2>/dev/null | tr -d ' ')
|
|
|
|
if [ "$ROLE_COLUMN" = "role" ]; then
|
|
echo -e "${GREEN}✅ 'role' column exists in users table${NC}"
|
|
else
|
|
echo -e "${RED}❌ 'role' column is missing from users table${NC}"
|
|
echo "This is likely the root cause!"
|
|
echo ""
|
|
echo "Available columns in users table:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT column_name, data_type FROM information_schema.columns WHERE table_name='users';"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 2. Check existing users and their roles
|
|
echo "📋 2. CHECKING EXISTING USERS"
|
|
echo "============================="
|
|
|
|
echo "All users in database:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT id, email, role, is_active, created_at FROM users ORDER BY created_at DESC LIMIT 10;"
|
|
|
|
echo ""
|
|
|
|
# 3. Check for test users
|
|
echo "📋 3. CHECKING FOR TEST USERS"
|
|
echo "============================="
|
|
|
|
echo "Test users (containing 'test' in email):"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT id, email, role, is_active, created_at FROM users WHERE email LIKE '%test%' ORDER BY created_at DESC;"
|
|
|
|
echo ""
|
|
|
|
# 4. Check database constraints and defaults
|
|
echo "📋 4. CHECKING ROLE CONSTRAINTS"
|
|
echo "==============================="
|
|
|
|
echo "Role column details:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name='users' AND column_name='role';"
|
|
|
|
echo ""
|
|
echo "Role check constraints (if any):"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT conname, consrc FROM pg_constraint WHERE conrelid = 'users'::regclass AND consrc LIKE '%role%';" 2>/dev/null || echo "No role constraints found"
|
|
|
|
echo ""
|
|
|
|
# 5. Test role insertion
|
|
echo "📋 5. TESTING ROLE INSERTION"
|
|
echo "============================"
|
|
|
|
TEST_EMAIL="schema.test.$(date +%s)@example.com"
|
|
|
|
echo "Creating test user with admin role:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "
|
|
INSERT INTO users (id, email, full_name, hashed_password, role, is_active, is_verified, created_at, updated_at)
|
|
VALUES (gen_random_uuid(), '$TEST_EMAIL', 'Schema Test', 'dummy_hash', 'admin', true, false, NOW(), NOW());
|
|
" 2>/dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ Successfully inserted user with admin role${NC}"
|
|
|
|
echo "Verifying insertion:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT id, email, role FROM users WHERE email='$TEST_EMAIL';"
|
|
|
|
echo "Cleaning up test user:"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "DELETE FROM users WHERE email='$TEST_EMAIL';" 2>/dev/null
|
|
else
|
|
echo -e "${RED}❌ Failed to insert user with admin role${NC}"
|
|
echo "This indicates a database constraint or permission issue"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 6. Check for migration history
|
|
echo "📋 6. CHECKING MIGRATION HISTORY"
|
|
echo "================================="
|
|
|
|
echo "Alembic version table (if exists):"
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "SELECT * FROM alembic_version;" 2>/dev/null || echo "No alembic_version table found"
|
|
|
|
echo ""
|
|
|
|
echo "📋 SUMMARY AND RECOMMENDATIONS"
|
|
echo "==============================="
|
|
|
|
# Check if we found any obvious issues
|
|
ISSUES_FOUND=0
|
|
|
|
# Check if role column exists
|
|
if [ "$ROLE_COLUMN" != "role" ]; then
|
|
echo -e "${RED}❌ CRITICAL: 'role' column missing from users table${NC}"
|
|
echo " → Run database migrations: alembic upgrade head"
|
|
echo " → Or add the column manually"
|
|
ISSUES_FOUND=1
|
|
fi
|
|
|
|
# Check if we can insert admin roles
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "INSERT INTO users (id, email, full_name, hashed_password, role, is_active, is_verified, created_at, updated_at) VALUES (gen_random_uuid(), 'temp.test@example.com', 'Test', 'hash', 'admin', true, false, NOW(), NOW());" 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
docker exec bakery-auth-db psql -U auth_user -d auth_db -c "DELETE FROM users WHERE email='temp.test@example.com';" 2>/dev/null
|
|
else
|
|
echo -e "${RED}❌ ISSUE: Cannot insert users with admin role${NC}"
|
|
echo " → Check database constraints or permissions"
|
|
ISSUES_FOUND=1
|
|
fi
|
|
|
|
if [ $ISSUES_FOUND -eq 0 ]; then
|
|
echo -e "${GREEN}✅ Database schema appears correct${NC}"
|
|
echo " → The issue is likely in the application code, not the database"
|
|
echo " → Check JWT token creation and role extraction logic"
|
|
else
|
|
echo -e "${YELLOW}⚠️ Database issues found - fix these first${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${YELLOW}🔧 Next steps:${NC}"
|
|
echo "1. If role column is missing: Run 'alembic upgrade head' in auth service"
|
|
echo "2. If schema is OK: Run the main debug script to check application logic"
|
|
echo "3. Check auth service logs during user registration" |