Spaces:
Running
Running
File size: 2,984 Bytes
92bfe31 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | """
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() |