Update teacher profiles and record summaries
This commit is contained in:
+46
-2
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
||||
|
||||
from ..api_utils import file_meta, load_accounts, payload_to_account, read_register_payload
|
||||
from ..api_utils import file_meta, load_accounts, load_teachers, payload_to_account, payload_to_teacher, read_register_payload
|
||||
from ..auth import verify_accounts_auth, verify_admin_auth
|
||||
from ..config import (
|
||||
ACCOUNTS_PATH,
|
||||
@@ -11,21 +11,26 @@ from ..config import (
|
||||
COURSE_SUMMARIES_ROOT,
|
||||
COURSE_SUMMARY_STATE_PATH,
|
||||
OPERATION_LOGS_PATH,
|
||||
TEACHERS_PATH,
|
||||
write_lock,
|
||||
)
|
||||
from ..data import (
|
||||
ACCOUNT_STATUSES,
|
||||
TEACHER_STATUSES,
|
||||
DuplicateRecordError,
|
||||
account_summary,
|
||||
account_to_dict,
|
||||
create_account,
|
||||
create_teacher,
|
||||
filter_accounts,
|
||||
register_class_record_lines,
|
||||
register_course_summary_texts,
|
||||
register_payment_lines,
|
||||
teacher_to_dict,
|
||||
update_account,
|
||||
update_teacher,
|
||||
)
|
||||
from ..schemas import AccountPayload
|
||||
from ..schemas import AccountPayload, TeacherPayload
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
@@ -83,10 +88,13 @@ async def register_course_summaries(request: Request, _user: str = Depends(verif
|
||||
@router.get("/api/account-health")
|
||||
def account_health(_user: str = Depends(verify_accounts_auth)):
|
||||
accounts = load_accounts()
|
||||
teachers = load_teachers()
|
||||
return {
|
||||
"ok": True,
|
||||
"accounts": file_meta(ACCOUNTS_PATH),
|
||||
"teachers": file_meta(TEACHERS_PATH),
|
||||
"accounts_count": len(accounts),
|
||||
"teachers_count": len(teachers),
|
||||
"account_summary": account_summary(accounts),
|
||||
}
|
||||
|
||||
@@ -119,6 +127,42 @@ def admin_statuses(_user: str = Depends(verify_admin_auth)):
|
||||
return {"account_statuses": sorted(ACCOUNT_STATUSES)}
|
||||
|
||||
|
||||
@router.get("/api/admin/teacher-statuses")
|
||||
def admin_teacher_statuses(_user: str = Depends(verify_admin_auth)):
|
||||
return {"teacher_statuses": sorted(TEACHER_STATUSES)}
|
||||
|
||||
|
||||
@router.get("/api/admin/teachers")
|
||||
def admin_teachers(_user: str = Depends(verify_admin_auth)):
|
||||
return {
|
||||
"teachers": [teacher_to_dict(teacher) for teacher in load_teachers()],
|
||||
}
|
||||
|
||||
|
||||
@router.post("/api/admin/teachers")
|
||||
def admin_create_teacher(payload: TeacherPayload, _user: str = Depends(verify_admin_auth)):
|
||||
try:
|
||||
with write_lock:
|
||||
result = create_teacher(TEACHERS_PATH, payload_to_teacher(payload))
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||
return {"ok": True, **result}
|
||||
|
||||
|
||||
@router.put("/api/admin/teachers/{teacher_id}")
|
||||
def admin_update_teacher(teacher_id: str, payload: TeacherPayload, _user: str = Depends(verify_admin_auth)):
|
||||
try:
|
||||
with write_lock:
|
||||
result = update_teacher(
|
||||
TEACHERS_PATH,
|
||||
teacher_id,
|
||||
payload_to_teacher(payload, teacher_id=payload.teacher_id.strip() or teacher_id),
|
||||
)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||
return {"ok": True, **result}
|
||||
|
||||
|
||||
@router.post("/api/admin/accounts")
|
||||
def admin_create_account(payload: AccountPayload, _user: str = Depends(verify_admin_auth)):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user