import re from . import db def make_display_name(group, name): if group and re.match(r"^\d{2}组$", group): return group + name return name def get_class_groups(user_id): return db.fetch_all( "SELECT c.id AS class_id, c.code AS class_code, c.name AS period, " "g.group_code AS `group`, cg.role_in_group AS role " "FROM class_groups cg " "JOIN classes c ON c.id=cg.class_id " "JOIN `groups` g ON g.id=cg.group_id " "WHERE cg.user_id=%s ORDER BY c.id, g.sort", (user_id,), ) def get_history_groups(user_id): return db.fetch_all( "SELECT og.group_code AS old_group FROM group_history gh " "JOIN classes c ON c.id=gh.class_id " "LEFT JOIN `groups` og ON og.id=gh.old_group_id " "WHERE gh.user_id=%s ORDER BY gh.changed_at DESC", (user_id,), ) def user_payload(user): group = user.get("group") or "" class_groups = get_class_groups(user["id"]) history_groups = [h["old_group"] for h in get_history_groups(user["id"])] return { "name": user["name"], "student_id": user["student_id"], "role": user.get("role", "student"), "group": group, "display_name": make_display_name(group, user["name"]), "class_groups": class_groups, "history_groups": history_groups, "first_login": bool(user.get("first_login")), }