mathpulse-api-v3test / scripts /seed_curriculum.py
github-actions[bot]
🚀 Auto-deploy backend from GitHub (93e7c2a)
92bfe31
"""
Seed Firestore curriculum collection from static data.
Run this ONCE to migrate static curriculum to Firestore:
python backend/scripts/seed_curriculum.py
After seeding, the curriculum API will read from Firestore.
"""
import logging
import json
import os
import sys
from pathlib import Path
# Add backend to path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from services.curriculum_service import _STATIC_SUBJECTS
logger = logging.getLogger(__name__)
def seed_curriculum():
"""Seed curriculum subjects to Firestore."""
try:
import firebase_admin
from firebase_admin import firestore, credentials
# Initialize Firebase
svc_account = os.getenv("FIREBASE_SERVICE_ACCOUNT_JSON")
if svc_account:
sa_creds = credentials.Certificate(json.loads(svc_account))
firebase_admin.initialize_app(sa_creds)
else:
firebase_admin.initialize_app()
db = firestore.client()
print("Firebase initialized")
except Exception as e:
print(f"Failed to initialize Firebase: {e}")
return
# Seed new subjects
subjects_ref = db.collection("subjects")
count = 0
for subject in _STATIC_SUBJECTS:
doc_ref = subjects_ref.document(subject["id"])
doc_ref.set(subject)
count += 1
print(f" Seeded: {subject['id']} - {subject['name']} ({len(subject.get('topics', []))} topics)")
print(f"\nSeeded {count} subjects to Firestore")
print("\nCurriculum is now available at:")
print(" GET /api/curriculum/subjects")
print(" GET /api/curriculum/subjects/{id}")
print(" GET /api/curriculum/subjects/{id}/topics")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
seed_curriculum()