mathpulse-api-v3test / scripts /migrate_grade12_to_grade11.py
github-actions[bot]
🚀 Auto-deploy backend from GitHub (93e7c2a)
92bfe31
"""
Migrate Grade 12 users to Grade 11.
Run this to convert all existing Grade 12 users to Grade 11:
python backend/scripts/migrate_grade12_to_grade11.py
This handles:
- Firestore user profiles
- Progress records
- Any references to Grade 12
"""
import logging
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
logger = logging.getLogger(__name__)
def migrate_grade_12_to_grade_11():
"""Migrate all Grade 12 users to Grade 11."""
try:
import firebase_admin
from firebase_admin import firestore
svc_account = os.getenv("FIREBASE_SERVICE_ACCOUNT_JSON")
if svc_account:
import json
from firebase_admin import credentials
creds = credentials.Certificate(json.loads(svc_account))
firebase_admin.initialize_app(creds)
else:
firebase_admin.initialize_app()
db = firestore.client()
print("Firebase initialized")
except Exception as e:
print(f"Failed to initialize Firebase: {e}")
return
# Count migrations
users_migrated = 0
progress_migrated = 0
# Migrate users collection
print("\n--- Migrating users ---")
users_ref = db.collection("users")
# Batch update for users
batch = db.batch()
user_count = 0
for doc in users_ref.stream():
data = doc.to_dict()
if data.get("grade") == "Grade 12":
batch.update(doc.reference, {"grade": "Grade 11"})
user_count += 1
print(f" Migrating user: {doc.id} ({data.get('name', 'Unknown')})")
if user_count >= 500:
batch.commit()
users_migrated += user_count
user_count = 0
batch = db.batch()
if user_count > 0:
batch.commit()
users_migrated += user_count
print(f" => Migrated {users_migrated} users to Grade 11")
# Migrate progress collection
print("\n--- Migrating progress ---")
progress_ref = db.collection("progress")
batch = db.batch()
progress_count = 0
for doc in progress_ref.stream():
data = doc.to_dict()
if data.get("gradeLevel") == "Grade 12":
batch.update(doc.reference, {"gradeLevel": "Grade 11"})
progress_count += 1
if progress_count >= 500:
batch.commit()
progress_migrated += progress_count
progress_count = 0
batch = db.batch()
if progress_count > 0:
batch.commit()
progress_migrated += progress_count
print(f" => Migrated {progress_migrated} progress records to Grade 11")
print(f"\n=== Migration complete ===")
print(f"Users migrated: {users_migrated}")
print(f"Progress migrated: {progress_migrated}")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
migrate_grade_12_to_grade_11()