diff --git a/routers/database/tools/graph_tree_router.py b/routers/database/tools/graph_tree_router.py index 4b54b75..c932cdc 100644 --- a/routers/database/tools/graph_tree_router.py +++ b/routers/database/tools/graph_tree_router.py @@ -489,7 +489,33 @@ def _get_children_for_node( logger.warning(f"AcademicYear children failed: {e}") return [] - # AcademicTerm → weeks + # AcademicWeek → days + if node_type == "AcademicWeek" and neo4j_db_name: + try: + with driver_tools.get_session(database=neo4j_db_name) as session: + result = session.run( + "MATCH (w:AcademicWeek {uuid_string: })" + "-[:ACADEMIC_WEEK_HAS_ACADEMIC_DAY]->(d:AcademicDay) " + "RETURN d ORDER BY d.date", + id=neo4j_node_id, + ) + days = [ + { + "neo4j_node_id": r["d"]["uuid_string"], + "label": r["d"].get("date", ""), + "node_type": "AcademicDay", + "neo4j_db_name": neo4j_db_name, + "is_section": False, + "has_children": False, + } + for r in result + ] + return days + except Exception as e: + logger.warning(f"AcademicWeek children failed: {e}") + return [] + + # AcademicTerm → weeks if node_type == "AcademicTerm" and neo4j_db_name: try: with driver_tools.get_session(database=neo4j_db_name) as session: @@ -506,7 +532,7 @@ def _get_children_for_node( "node_type": "AcademicWeek", "neo4j_db_name": neo4j_db_name, "is_section": False, - "has_children": False, + "has_children": True, } for r in result ] @@ -622,7 +648,7 @@ async def get_academic_calendar(credentials: dict = Depends(SupabaseBearer())) - "node_type": "AcademicWeek", "neo4j_db_name": institute_db, "is_section": False, - "has_children": False, + "has_children": True, } for w in s2.run( "MATCH (t:AcademicTerm {uuid_string: $tid})-[:ACADEMIC_TERM_HAS_ACADEMIC_WEEK]->(w:AcademicWeek) " "RETURN w ORDER BY toInteger(w.academic_week_number)",