Spaces:
Running
Running
| """ | |
| 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() |