Commit 0d0589b6 authored by uuo00_n's avatar uuo00_n

fix(students): 修复默认用户关联学生实体缺失导致/students/me 404的问题

确保默认用户有对应的学生实体,避免接口返回404错误
同时优化/students/me接口的错误处理逻辑
parent 7133e3a8
...@@ -2,7 +2,8 @@ from fastapi import APIRouter, Depends, HTTPException, Path, Body ...@@ -2,7 +2,8 @@ from fastapi import APIRouter, Depends, HTTPException, Path, Body
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional, Dict, Any from typing import Optional, Dict, Any
from app.api.deps import require_edition_for_mode, require_role from app.api.deps import require_edition_for_mode, require_role
from app.services.student_binding import bind_user_to_student, unbind_user_from_student, get_student_by_user from app.services.student_binding import bind_user_to_student, unbind_user_from_student
from app.services.dashboard import _get_student_by_user
router = APIRouter(dependencies=[Depends(require_edition_for_mode())]) router = APIRouter(dependencies=[Depends(require_edition_for_mode())])
...@@ -61,8 +62,13 @@ async def unbind(student_id: str = Path(..., description="学生ID"), current_us ...@@ -61,8 +62,13 @@ async def unbind(student_id: str = Path(..., description="学生ID"), current_us
}, },
) )
async def me(current_user: dict = Depends(require_role(1))) -> StudentOut: async def me(current_user: dict = Depends(require_role(1))) -> StudentOut:
s = await get_student_by_user(str(current_user["_id"])) try:
if not s: s = await _get_student_by_user(current_user["_id"])
raise HTTPException(status_code=404, detail="当前用户未绑定学生") if not s:
s["_id"] = str(s["_id"]) # 简化返回 raise HTTPException(status_code=404, detail="当前用户未绑定学生")
return s s["_id"] = str(s["_id"])
return s
except HTTPException as e:
if e.status_code == 404:
raise HTTPException(status_code=404, detail="当前用户未绑定学生")
raise e
...@@ -594,6 +594,25 @@ async def seed_identity_data(db, mode: str): ...@@ -594,6 +594,25 @@ async def seed_identity_data(db, mode: str):
if user_doc: if user_doc:
p = find_person("P-STU-USER") p = find_person("P-STU-USER")
bindings.append({"account_id": user_doc["_id"], "person_id": p["_id"], "type": "student", "primary": True}) bindings.append({"account_id": user_doc["_id"], "person_id": p["_id"], "type": "student", "primary": True})
# 修复:为默认用户创建关联的学生实体,防止 /students/me 404
# 注意:P-STU-USER 是人物,这里需要一个对应的 student 实体指向它
existing_stu = await db.students.find_one({"person_id": p["_id"]})
if not existing_stu:
await db.students.insert_one({
"student_id": "STU-USER-001",
"name": "默认学生USER",
"gender": "男",
"grade": "22级",
"major": "软件技术",
"class_id": "SW22-1", # 默认分到 1 班
"status": "在读",
"person_id": p["_id"],
"created_at": datetime.now(),
"updated_at": datetime.now(),
})
print("已为默认用户 user 创建关联学生实体")
if manager_doc: if manager_doc:
p = find_person("P-TEA-001") p = find_person("P-TEA-001")
bindings.append({"account_id": manager_doc["_id"], "person_id": p["_id"], "type": "teacher", "primary": True}) bindings.append({"account_id": manager_doc["_id"], "person_id": p["_id"], "type": "teacher", "primary": True})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment