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
from pydantic import BaseModel
from typing import Optional, Dict, Any
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())])
......@@ -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:
s = await get_student_by_user(str(current_user["_id"]))
if not s:
raise HTTPException(status_code=404, detail="当前用户未绑定学生")
s["_id"] = str(s["_id"]) # 简化返回
return s
try:
s = await _get_student_by_user(current_user["_id"])
if not s:
raise HTTPException(status_code=404, detail="当前用户未绑定学生")
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):
if user_doc:
p = find_person("P-STU-USER")
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:
p = find_person("P-TEA-001")
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