feat(cache): 扩充 INVALIDATION_MAP 覆盖剩余 27 个模块

为 i18n、adaptive-practice、announcements、attendance、audit、course-plans、
diagnostic、elective、error-book、exams、grades、homework、invitation-codes、
leave-requests、lesson-preparation、messaging、notifications、onboarding、
proctoring、questions、rbac、scheduling、school、settings、standards、
textbooks、users 共 27 个模块登记写操作的失效副作用(tags/queryKeys/paths),
便于后续 actions 文件迁移调用 invalidateFor(actionId)。

- 新增 195 个 actionId(含 create/update/delete 基础动作及 batch/import/
  appeal/draft/lock/template/formative/comment/substitute 等特殊写操作)
- tags 采用模块级粒度 ["{module}"],简化迁移
- paths 从原 revalidatePath 调用中提取,动态段用父路径覆盖
- 同步扩充 CLIENT_INVALIDATION_MAP(仅 queryKeys 子集)
- 保持 classes 部分(已有)不变
- 通过 npx tsc --noEmit 与 eslint 零错误验证
This commit is contained in:
SpecialX
2026-07-05 21:28:40 +08:00
parent 99f15ee37a
commit cb5b92160c
2 changed files with 1335 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
* 由 useActionMutation 在 onSuccess 中查询以自动 invalidateQueries。
*/
export const CLIENT_INVALIDATION_MAP = {
// ===== classes 模块 =====
"classes.create": { queryKeys: [["classes", "list"]] },
"classes.update": { queryKeys: [["classes", "detail"], ["classes", "list"]] },
"classes.delete": { queryKeys: [["classes", "list"], ["classes", "detail"]] },
@@ -15,6 +16,255 @@ export const CLIENT_INVALIDATION_MAP = {
"classes.grade.update": { queryKeys: [["classes", "list"]] },
"classes.invitation.create": { queryKeys: [["classes", "invitations"]] },
"classes.invitation.revoke": { queryKeys: [["classes", "invitations"]] },
// ===== i18n 模块 =====
"i18n.setLocale": { queryKeys: [["i18n"]] },
// ===== adaptive-practice 模块 =====
"adaptive-practice.create": { queryKeys: [["adaptive-practice", "list"]] },
"adaptive-practice.submit": { queryKeys: [["adaptive-practice", "detail"]] },
"adaptive-practice.complete": { queryKeys: [["adaptive-practice", "list"], ["adaptive-practice", "detail"]] },
"adaptive-practice.abandon": { queryKeys: [["adaptive-practice", "list"]] },
// ===== announcements 模块 =====
"announcements.create": { queryKeys: [["announcements", "list"]] },
"announcements.update": { queryKeys: [["announcements", "detail"], ["announcements", "list"]] },
"announcements.delete": { queryKeys: [["announcements", "list"]] },
"announcements.publish": { queryKeys: [["announcements", "list"]] },
"announcements.archive": { queryKeys: [["announcements", "list"]] },
"announcements.togglePin": { queryKeys: [["announcements", "list"]] },
"announcements.markRead": { queryKeys: [["announcements", "unread"]] },
// ===== attendance 模块 =====
"attendance.record": { queryKeys: [["attendance", "list"]] },
"attendance.batchRecord": { queryKeys: [["attendance", "list"]] },
"attendance.update": { queryKeys: [["attendance", "detail"], ["attendance", "list"]] },
"attendance.delete": { queryKeys: [["attendance", "list"]] },
"attendance.saveRules": { queryKeys: [["attendance", "rules"]] },
// ===== audit 模块 =====
"audit.saveRetentionConfig": { queryKeys: [["audit", "config"]] },
"audit.purge": { queryKeys: [["audit", "list"]] },
// ===== course-plans 模块 =====
"course-plans.create": { queryKeys: [["course-plans", "list"]] },
"course-plans.update": { queryKeys: [["course-plans", "detail"], ["course-plans", "list"]] },
"course-plans.delete": { queryKeys: [["course-plans", "list"]] },
"course-plans.item.create": { queryKeys: [["course-plans", "items"]] },
"course-plans.item.update": { queryKeys: [["course-plans", "items"]] },
"course-plans.item.delete": { queryKeys: [["course-plans", "items"]] },
"course-plans.item.toggleCompleted": { queryKeys: [["course-plans", "items"]] },
"course-plans.item.reorder": { queryKeys: [["course-plans", "items"]] },
"course-plans.item.bulkToggle": { queryKeys: [["course-plans", "items"]] },
"course-plans.copy": { queryKeys: [["course-plans", "list"]] },
// ===== diagnostic 模块 =====
"diagnostic.generateStudentReport": { queryKeys: [["diagnostic", "list"]] },
"diagnostic.generateClassReport": { queryKeys: [["diagnostic", "list"]] },
"diagnostic.generateGradeReport": { queryKeys: [["diagnostic", "list"]] },
"diagnostic.publish": { queryKeys: [["diagnostic", "list"]] },
"diagnostic.delete": { queryKeys: [["diagnostic", "list"]] },
// ===== elective 模块 =====
"elective.create": { queryKeys: [["elective", "list"]] },
"elective.update": { queryKeys: [["elective", "detail"], ["elective", "list"]] },
"elective.delete": { queryKeys: [["elective", "list"]] },
"elective.openSelection": { queryKeys: [["elective", "list"]] },
"elective.closeSelection": { queryKeys: [["elective", "list"]] },
"elective.runLottery": { queryKeys: [["elective", "list"]] },
"elective.selectCourse": { queryKeys: [["elective", "selections"]] },
"elective.dropCourse": { queryKeys: [["elective", "selections"]] },
// ===== error-book 模块 =====
"error-book.create": { queryKeys: [["error-book", "list"]] },
"error-book.update": { queryKeys: [["error-book", "detail"], ["error-book", "list"]] },
"error-book.review": { queryKeys: [["error-book", "detail"]] },
"error-book.delete": { queryKeys: [["error-book", "list"]] },
"error-book.archive": { queryKeys: [["error-book", "list"]] },
"error-book.collect": { queryKeys: [["error-book", "list"]] },
// ===== exams 模块 =====
"exams.create": { queryKeys: [["exams", "list"]] },
"exams.createAi": { queryKeys: [["exams", "list"]] },
"exams.regenerateAiQuestion": { queryKeys: [["exams", "detail"]] },
"exams.update": { queryKeys: [["exams", "detail"], ["exams", "list"]] },
"exams.delete": { queryKeys: [["exams", "list"]] },
"exams.duplicate": { queryKeys: [["exams", "list"]] },
"exams.richContent.save": { queryKeys: [["exams", "detail"]] },
// ===== grades 模块 =====
"grades.create": { queryKeys: [["grades", "list"]] },
"grades.batchCreate": { queryKeys: [["grades", "list"]] },
"grades.batchCreateByExam": { queryKeys: [["grades", "list"]] },
"grades.undoBatchCreate": { queryKeys: [["grades", "list"]] },
"grades.update": { queryKeys: [["grades", "detail"], ["grades", "list"]] },
"grades.delete": { queryKeys: [["grades", "list"]] },
"grades.bulkDelete": { queryKeys: [["grades", "list"]] },
"grades.import": { queryKeys: [["grades", "list"]] },
"grades.draft.save": { queryKeys: [["grades", "draft"]] },
"grades.draft.delete": { queryKeys: [["grades", "draft"]] },
"grades.appeal.create": { queryKeys: [["grades", "appeals"]] },
"grades.appeal.withdraw": { queryKeys: [["grades", "appeals"]] },
"grades.appeal.review": { queryKeys: [["grades", "appeals"]] },
"grades.lock.acquire": { queryKeys: [["grades", "lock"]] },
"grades.lock.renew": { queryKeys: [["grades", "lock"]] },
"grades.lock.release": { queryKeys: [["grades", "lock"]] },
// ===== homework 模块 =====
"homework.create": { queryKeys: [["homework", "list"]] },
"homework.startSubmission": { queryKeys: [["homework", "submissions"]] },
"homework.saveAnswer": { queryKeys: [["homework", "submissions"]] },
"homework.submit": { queryKeys: [["homework", "submissions"]] },
"homework.grade": { queryKeys: [["homework", "submissions"]] },
"homework.batchAutoGrade": { queryKeys: [["homework", "submissions"]] },
"homework.deleteScan": { queryKeys: [["homework", "scans"]] },
"homework.remind": { queryKeys: [["homework", "list"]] },
// ===== invitation-codes 模块 =====
"invitation-codes.generate": { queryKeys: [["invitation-codes", "list"]] },
"invitation-codes.delete": { queryKeys: [["invitation-codes", "list"]] },
"invitation-codes.validate": { queryKeys: [["invitation-codes"]] },
// ===== leave-requests 模块 =====
"leave-requests.create": { queryKeys: [["leave-requests", "list"]] },
"leave-requests.review": { queryKeys: [["leave-requests", "list"]] },
"leave-requests.cancel": { queryKeys: [["leave-requests", "list"]] },
// ===== lesson-preparation 模块 =====
"lesson-preparation.create": { queryKeys: [["lesson-preparation", "list"]] },
"lesson-preparation.update": { queryKeys: [["lesson-preparation", "detail"], ["lesson-preparation", "list"]] },
"lesson-preparation.saveVersion": { queryKeys: [["lesson-preparation", "versions"]] },
"lesson-preparation.revertVersion": { queryKeys: [["lesson-preparation", "versions"]] },
"lesson-preparation.delete": { queryKeys: [["lesson-preparation", "list"]] },
"lesson-preparation.publish": { queryKeys: [["lesson-preparation", "detail"]] },
"lesson-preparation.unpublish": { queryKeys: [["lesson-preparation", "detail"]] },
"lesson-preparation.duplicate": { queryKeys: [["lesson-preparation", "list"]] },
"lesson-preparation.template.save": { queryKeys: [["lesson-preparation", "templates"]] },
"lesson-preparation.template.delete": { queryKeys: [["lesson-preparation", "templates"]] },
"lesson-preparation.formative.create": { queryKeys: [["lesson-preparation", "formative"]] },
"lesson-preparation.formative.update": { queryKeys: [["lesson-preparation", "formative"]] },
"lesson-preparation.formative.delete": { queryKeys: [["lesson-preparation", "formative"]] },
"lesson-preparation.formative.submitResponse": { queryKeys: [["lesson-preparation", "formative"]] },
"lesson-preparation.comment.create": { queryKeys: [["lesson-preparation", "comments"]] },
"lesson-preparation.comment.update": { queryKeys: [["lesson-preparation", "comments"]] },
"lesson-preparation.comment.toggleResolved": { queryKeys: [["lesson-preparation", "comments"]] },
"lesson-preparation.comment.delete": { queryKeys: [["lesson-preparation", "comments"]] },
"lesson-preparation.substitute.create": { queryKeys: [["lesson-preparation", "substitutes"]] },
"lesson-preparation.substitute.updateStatus": { queryKeys: [["lesson-preparation", "substitutes"]] },
"lesson-preparation.substitute.delete": { queryKeys: [["lesson-preparation", "substitutes"]] },
// ===== messaging 模块 =====
"messaging.send": { queryKeys: [["messaging", "list"]] },
"messaging.markRead": { queryKeys: [["messaging", "detail"], ["messaging", "unread"]] },
"messaging.delete": { queryKeys: [["messaging", "list"]] },
"messaging.toggleStar": { queryKeys: [["messaging", "detail"]] },
"messaging.draft.save": { queryKeys: [["messaging", "drafts"]] },
"messaging.draft.delete": { queryKeys: [["messaging", "drafts"]] },
"messaging.bulkMarkRead": { queryKeys: [["messaging", "list"], ["messaging", "unread"]] },
"messaging.bulkDelete": { queryKeys: [["messaging", "list"]] },
"messaging.bulkToggleStar": { queryKeys: [["messaging", "list"]] },
"messaging.recall": { queryKeys: [["messaging", "detail"]] },
"messaging.sendGroup": { queryKeys: [["messaging", "list"]] },
"messaging.template.save": { queryKeys: [["messaging", "templates"]] },
"messaging.template.delete": { queryKeys: [["messaging", "templates"]] },
"messaging.report": { queryKeys: [["messaging", "detail"]] },
"messaging.block": { queryKeys: [["messaging", "blocks"]] },
"messaging.unblock": { queryKeys: [["messaging", "blocks"]] },
// ===== notifications 模块 =====
"notifications.send": { queryKeys: [["notifications", "list"]] },
"notifications.sendClass": { queryKeys: [["notifications", "list"]] },
"notifications.markRead": { queryKeys: [["notifications", "detail"], ["notifications", "unread"]] },
"notifications.markAllRead": { queryKeys: [["notifications", "list"], ["notifications", "unread"]] },
"notifications.archive": { queryKeys: [["notifications", "list"]] },
"notifications.updatePreferences": { queryKeys: [["notifications", "preferences"]] },
// ===== onboarding 模块 =====
"onboarding.complete": { queryKeys: [["onboarding", "status"]] },
// ===== proctoring 模块 =====
"proctoring.recordEvent": { queryKeys: [["proctoring", "events"]] },
// ===== questions 模块 =====
"questions.create": { queryKeys: [["questions", "list"]] },
"questions.update": { queryKeys: [["questions", "detail"], ["questions", "list"]] },
"questions.delete": { queryKeys: [["questions", "list"]] },
"questions.deleteBatch": { queryKeys: [["questions", "list"]] },
"questions.import": { queryKeys: [["questions", "list"]] },
// ===== rbac 模块 =====
"rbac.role.create": { queryKeys: [["rbac", "roles"]] },
"rbac.role.update": { queryKeys: [["rbac", "roles"]] },
"rbac.role.delete": { queryKeys: [["rbac", "roles"]] },
"rbac.role.toggleEnabled": { queryKeys: [["rbac", "roles"]] },
"rbac.role.setPermissions": { queryKeys: [["rbac", "roles"]] },
"rbac.assignUserRoles": { queryKeys: [["rbac", "userRoles"]] },
// ===== scheduling 模块 =====
"scheduling.saveRules": { queryKeys: [["scheduling", "rules"]] },
"scheduling.autoSchedule": { queryKeys: [["scheduling", "list"]] },
"scheduling.applyAutoSchedule": { queryKeys: [["scheduling", "changes"]] },
"scheduling.requestChange": { queryKeys: [["scheduling", "changes"]] },
"scheduling.approveChange": { queryKeys: [["scheduling", "changes"]] },
"scheduling.rejectChange": { queryKeys: [["scheduling", "changes"]] },
// ===== school 模块 =====
"school.department.create": { queryKeys: [["school", "departments"]] },
"school.department.update": { queryKeys: [["school", "departments"]] },
"school.department.delete": { queryKeys: [["school", "departments"]] },
"school.academicYear.create": { queryKeys: [["school", "academicYears"]] },
"school.academicYear.update": { queryKeys: [["school", "academicYears"]] },
"school.academicYear.delete": { queryKeys: [["school", "academicYears"]] },
"school.school.create": { queryKeys: [["school", "schools"]] },
"school.school.update": { queryKeys: [["school", "schools"]] },
"school.school.delete": { queryKeys: [["school", "schools"]] },
"school.grade.create": { queryKeys: [["school", "grades"]] },
"school.grade.update": { queryKeys: [["school", "grades"]] },
"school.grade.delete": { queryKeys: [["school", "grades"]] },
"school.grade.promote": { queryKeys: [["school", "grades"]] },
// ===== settings 模块 =====
"settings.aiProvider.upsert": { queryKeys: [["settings", "aiProviders"]] },
"settings.aiProvider.test": { queryKeys: [["settings", "aiProviders"]] },
"settings.aiProvider.delete": { queryKeys: [["settings", "aiProviders"]] },
"settings.avatar.update": { queryKeys: [["settings", "avatar"]] },
"settings.avatar.remove": { queryKeys: [["settings", "avatar"]] },
"settings.brand.save": { queryKeys: [["settings", "brand"]] },
"settings.password.change": { queryKeys: [["settings", "password"]] },
"settings.security.setup2FA": { queryKeys: [["settings", "security"]] },
"settings.security.verify2FA": { queryKeys: [["settings", "security"]] },
"settings.security.disable2FA": { queryKeys: [["settings", "security"]] },
"settings.security.regenerateBackupCodes": { queryKeys: [["settings", "security"]] },
"settings.security.revokeSessions": { queryKeys: [["settings", "security"]] },
"settings.profile.update": { queryKeys: [["settings", "profile"]] },
"settings.notifications.updatePreferences": { queryKeys: [["settings", "notificationPreferences"]] },
"settings.systemSettings.save": { queryKeys: [["settings", "system"]] },
// ===== standards 模块 =====
"standards.create": { queryKeys: [["standards", "list"]] },
"standards.update": { queryKeys: [["standards", "detail"], ["standards", "list"]] },
"standards.deactivate": { queryKeys: [["standards", "list"]] },
"standards.linkPlan": { queryKeys: [["standards", "planLinks"]] },
"standards.unlinkPlan": { queryKeys: [["standards", "planLinks"]] },
// ===== textbooks 模块 =====
"textbooks.create": { queryKeys: [["textbooks", "list"]] },
"textbooks.update": { queryKeys: [["textbooks", "detail"], ["textbooks", "list"]] },
"textbooks.delete": { queryKeys: [["textbooks", "list"]] },
"textbooks.chapter.create": { queryKeys: [["textbooks", "chapters"]] },
"textbooks.chapter.update": { queryKeys: [["textbooks", "chapters"]] },
"textbooks.chapter.delete": { queryKeys: [["textbooks", "chapters"]] },
"textbooks.chapter.reorder": { queryKeys: [["textbooks", "chapters"]] },
"textbooks.knowledgePoint.create": { queryKeys: [["textbooks", "knowledgePoints"]] },
"textbooks.knowledgePoint.update": { queryKeys: [["textbooks", "knowledgePoints"]] },
"textbooks.knowledgePoint.delete": { queryKeys: [["textbooks", "knowledgePoints"]] },
"textbooks.prerequisite.create": { queryKeys: [["textbooks", "prerequisites"]] },
"textbooks.prerequisite.delete": { queryKeys: [["textbooks", "prerequisites"]] },
// ===== users 模块 =====
"users.update": { queryKeys: [["users", "detail"]] },
"users.import": { queryKeys: [["users", "list"]] },
"users.delete": { queryKeys: [["users", "list"]] },
} as const
export type ClientInvalidationActionId = keyof typeof CLIENT_INVALIDATION_MAP

File diff suppressed because it is too large Load Diff