fix(nav): AcademicWeek children + days support in graph tree API
- AcademicWeek now returns has_children=true in both /calendar/academic endpoint and _get_children_for_node for AcademicTerm case - Added AcademicWeek case to _get_children_for_node: queries ACADEMIC_WEEK_HAS_ACADEMIC_DAY relationships to return AcademicDay children - Academic calendar can now expand weeks to show individual days Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
caeee6c9e4
commit
b42b409bb2
@ -489,6 +489,32 @@ def _get_children_for_node(
|
|||||||
logger.warning(f"AcademicYear children failed: {e}")
|
logger.warning(f"AcademicYear children failed: {e}")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
# 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
|
# AcademicTerm → weeks
|
||||||
if node_type == "AcademicTerm" and neo4j_db_name:
|
if node_type == "AcademicTerm" and neo4j_db_name:
|
||||||
try:
|
try:
|
||||||
@ -506,7 +532,7 @@ def _get_children_for_node(
|
|||||||
"node_type": "AcademicWeek",
|
"node_type": "AcademicWeek",
|
||||||
"neo4j_db_name": neo4j_db_name,
|
"neo4j_db_name": neo4j_db_name,
|
||||||
"is_section": False,
|
"is_section": False,
|
||||||
"has_children": False,
|
"has_children": True,
|
||||||
}
|
}
|
||||||
for r in result
|
for r in result
|
||||||
]
|
]
|
||||||
@ -622,7 +648,7 @@ async def get_academic_calendar(credentials: dict = Depends(SupabaseBearer())) -
|
|||||||
"node_type": "AcademicWeek",
|
"node_type": "AcademicWeek",
|
||||||
"neo4j_db_name": institute_db,
|
"neo4j_db_name": institute_db,
|
||||||
"is_section": False,
|
"is_section": False,
|
||||||
"has_children": False,
|
"has_children": True,
|
||||||
} for w in s2.run(
|
} for w in s2.run(
|
||||||
"MATCH (t:AcademicTerm {uuid_string: $tid})-[:ACADEMIC_TERM_HAS_ACADEMIC_WEEK]->(w:AcademicWeek) "
|
"MATCH (t:AcademicTerm {uuid_string: $tid})-[:ACADEMIC_TERM_HAS_ACADEMIC_WEEK]->(w:AcademicWeek) "
|
||||||
"RETURN w ORDER BY toInteger(w.academic_week_number)",
|
"RETURN w ORDER BY toInteger(w.academic_week_number)",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user