PostgreSQL + Django ORM。Migration 数量约:accounts 12、recruitment 29、treasury 7、classroom 4、files 1、services 4、core 3。mailing 无 migration。
核心 ER(简化)
accounts
| 模型 | 要点 |
|---|
User | email 登录;USERNAME_FIELD=email |
Department | slug 唯一 |
Membership | admin 全局且 department 必空;chair 必须绑部门 |
ApplicationProfile | BU ID / 年级 / 微信 / 简历 File |
ActivationCode + Redemption | 每用户成功兑换一次 |
OAuthIdentity | 与 allauth SocialAccount 同步 |
EmailNotificationPreference | 分类开关 |
recruitment
| 模型 | 要点 |
|---|
RecruitmentCycle | 招新周期 |
RecruitmentCycleDepartmentConfig | 部门是否参与该周期 |
DepartmentJob | 岗位 JD |
DepartmentFormField | 部门问卷,跨周期复用 |
DepartmentEmailSettings | 录取/拒信文案 |
Application | 岗位级申请 + 状态机 |
UserCycleState | 志愿、offer 窗口、interest 窗口 |
InterviewEvent / Slot / Booking | 面试;Booking 含 Zoom 字段 |
DepartmentInterest | 拒绝后其他部门「感兴趣」 |
Application 状态:draft → submitted → interview → offered → accepted / rejected / withdrawn。占用名额状态:submitted、interview、offered。申请人可自行撤回的仅 submitted。
其他 app
| app | 模型 |
|---|
| treasury | Reimbursement(draft/submitted/rejected/paid)、ReimbursementItem、IncomeTransaction |
| classroom | ClassroomBookingRequest、回执 ClassroomBookingReceipt |
| files | File、ApplicationAttachment |
| services | DriveAccount、CssaGptAccessRequest |
| core | ActivityLog(module/action/target + JSON metadata) |