diff --git a/src/shared/lib/cache/client-invalidation-map.ts b/src/shared/lib/cache/client-invalidation-map.ts index 83386ed..ab30fd9 100644 --- a/src/shared/lib/cache/client-invalidation-map.ts +++ b/src/shared/lib/cache/client-invalidation-map.ts @@ -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 diff --git a/src/shared/lib/cache/invalidation-map.ts b/src/shared/lib/cache/invalidation-map.ts index 4e5af93..1bcf442 100644 --- a/src/shared/lib/cache/invalidation-map.ts +++ b/src/shared/lib/cache/invalidation-map.ts @@ -25,6 +25,12 @@ export function fillTemplate( * - paths:Next.js revalidatePath 失效的路径 * * 新增写操作必须在此登记,否则 invalidateFor 会抛错。 + * + * 命名约定: + * - actionId:`{module}.{verb}` 或 `{module}.{resource}.{verb}` + * - tags:模块级粒度 `["{module}"]`(简化迁移,不强制资源级) + * - queryKeys:`[["{module}"]]` 或 `[["{module}", "list"]]` + * - paths:从原 revalidatePath 调用中提取;动态段(`[id]` 路由)用父路径覆盖 */ export const INVALIDATION_MAP = { // ===== classes 模块 ===== @@ -69,6 +75,1085 @@ export const INVALIDATION_MAP = { queryKeys: [["classes", "invitations"]], paths: ["/teacher/classes/my/{classId}"], }, + + // ===== i18n 模块 ===== + "i18n.setLocale": { + tags: ["i18n"], + queryKeys: [["i18n"]], + paths: ["/"], + }, + + // ===== adaptive-practice 模块 ===== + "adaptive-practice.create": { + tags: ["adaptive-practice"], + queryKeys: [["adaptive-practice", "list"]], + paths: ["/student/practice"], + }, + "adaptive-practice.submit": { + tags: ["adaptive-practice"], + queryKeys: [["adaptive-practice", "detail"]], + paths: ["/student/practice"], + }, + "adaptive-practice.complete": { + tags: ["adaptive-practice"], + queryKeys: [["adaptive-practice", "list"], ["adaptive-practice", "detail"]], + paths: ["/student/practice"], + }, + "adaptive-practice.abandon": { + tags: ["adaptive-practice"], + queryKeys: [["adaptive-practice", "list"]], + paths: ["/student/practice"], + }, + + // ===== announcements 模块 ===== + "announcements.create": { + tags: ["announcements"], + queryKeys: [["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.update": { + tags: ["announcements"], + queryKeys: [["announcements", "detail"], ["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.delete": { + tags: ["announcements"], + queryKeys: [["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.publish": { + tags: ["announcements"], + queryKeys: [["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.archive": { + tags: ["announcements"], + queryKeys: [["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.togglePin": { + tags: ["announcements"], + queryKeys: [["announcements", "list"]], + paths: ["/admin/announcements", "/announcements"], + }, + "announcements.markRead": { + tags: ["announcements"], + queryKeys: [["announcements", "unread"]], + paths: [], + }, + + // ===== attendance 模块 ===== + "attendance.record": { + tags: ["attendance"], + queryKeys: [["attendance", "list"]], + paths: ["/teacher/attendance"], + }, + "attendance.batchRecord": { + tags: ["attendance"], + queryKeys: [["attendance", "list"]], + paths: ["/teacher/attendance"], + }, + "attendance.update": { + tags: ["attendance"], + queryKeys: [["attendance", "detail"], ["attendance", "list"]], + paths: ["/teacher/attendance"], + }, + "attendance.delete": { + tags: ["attendance"], + queryKeys: [["attendance", "list"]], + paths: ["/teacher/attendance"], + }, + "attendance.saveRules": { + tags: ["attendance"], + queryKeys: [["attendance", "rules"]], + paths: ["/teacher/attendance"], + }, + + // ===== audit 模块 ===== + "audit.saveRetentionConfig": { + tags: ["audit"], + queryKeys: [["audit", "config"]], + paths: ["/admin/audit-logs/overview", "/admin/audit-logs"], + }, + "audit.purge": { + tags: ["audit"], + queryKeys: [["audit", "list"]], + paths: ["/admin/audit-logs/overview", "/admin/audit-logs"], + }, + + // ===== course-plans 模块 ===== + "course-plans.create": { + tags: ["course-plans"], + queryKeys: [["course-plans", "list"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.update": { + tags: ["course-plans"], + queryKeys: [["course-plans", "detail"], ["course-plans", "list"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.delete": { + tags: ["course-plans"], + queryKeys: [["course-plans", "list"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.create": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.update": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.delete": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.toggleCompleted": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.reorder": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.item.bulkToggle": { + tags: ["course-plans"], + queryKeys: [["course-plans", "items"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + "course-plans.copy": { + tags: ["course-plans"], + queryKeys: [["course-plans", "list"]], + paths: [ + "/admin/course-plans", + "/teacher/course-plans", + "/parent/course-plans", + "/student/course-plans", + ], + }, + + // ===== diagnostic 模块 ===== + "diagnostic.generateStudentReport": { + tags: ["diagnostic"], + queryKeys: [["diagnostic", "list"]], + paths: ["/teacher/diagnostic"], + }, + "diagnostic.generateClassReport": { + tags: ["diagnostic"], + queryKeys: [["diagnostic", "list"]], + paths: ["/teacher/diagnostic"], + }, + "diagnostic.generateGradeReport": { + tags: ["diagnostic"], + queryKeys: [["diagnostic", "list"]], + paths: ["/teacher/diagnostic", "/admin/diagnostic"], + }, + "diagnostic.publish": { + tags: ["diagnostic"], + queryKeys: [["diagnostic", "list"]], + paths: ["/teacher/diagnostic"], + }, + "diagnostic.delete": { + tags: ["diagnostic"], + queryKeys: [["diagnostic", "list"]], + paths: ["/teacher/diagnostic"], + }, + + // ===== elective 模块 ===== + "elective.create": { + tags: ["elective"], + queryKeys: [["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.update": { + tags: ["elective"], + queryKeys: [["elective", "detail"], ["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.delete": { + tags: ["elective"], + queryKeys: [["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.openSelection": { + tags: ["elective"], + queryKeys: [["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.closeSelection": { + tags: ["elective"], + queryKeys: [["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.runLottery": { + tags: ["elective"], + queryKeys: [["elective", "list"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.selectCourse": { + tags: ["elective"], + queryKeys: [["elective", "selections"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + "elective.dropCourse": { + tags: ["elective"], + queryKeys: [["elective", "selections"]], + paths: ["/admin/elective", "/teacher/elective", "/student/elective", "/parent/elective"], + }, + + // ===== error-book 模块 ===== + "error-book.create": { + tags: ["error-book"], + queryKeys: [["error-book", "list"]], + paths: ["/student/error-book"], + }, + "error-book.update": { + tags: ["error-book"], + queryKeys: [["error-book", "detail"], ["error-book", "list"]], + paths: ["/student/error-book"], + }, + "error-book.review": { + tags: ["error-book"], + queryKeys: [["error-book", "detail"]], + paths: ["/student/error-book"], + }, + "error-book.delete": { + tags: ["error-book"], + queryKeys: [["error-book", "list"]], + paths: ["/student/error-book"], + }, + "error-book.archive": { + tags: ["error-book"], + queryKeys: [["error-book", "list"]], + paths: ["/student/error-book"], + }, + "error-book.collect": { + tags: ["error-book"], + queryKeys: [["error-book", "list"]], + paths: ["/student/error-book"], + }, + + // ===== exams 模块 ===== + "exams.create": { + tags: ["exams"], + queryKeys: [["exams", "list"]], + paths: ["/teacher/exams/all"], + }, + "exams.createAi": { + tags: ["exams"], + queryKeys: [["exams", "list"]], + paths: ["/teacher/exams/all"], + }, + "exams.regenerateAiQuestion": { + tags: ["exams"], + queryKeys: [["exams", "detail"]], + paths: [], + }, + "exams.update": { + tags: ["exams"], + queryKeys: [["exams", "detail"], ["exams", "list"]], + paths: ["/teacher/exams/all"], + }, + "exams.delete": { + tags: ["exams"], + queryKeys: [["exams", "list"]], + paths: ["/teacher/exams/all"], + }, + "exams.duplicate": { + tags: ["exams"], + queryKeys: [["exams", "list"]], + paths: ["/teacher/exams/all"], + }, + "exams.richContent.save": { + tags: ["exams"], + queryKeys: [["exams", "detail"]], + paths: ["/teacher/exams/all"], + }, + + // ===== grades 模块 ===== + "grades.create": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.batchCreate": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.batchCreateByExam": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.undoBatchCreate": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.update": { + tags: ["grades"], + queryKeys: [["grades", "detail"], ["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.delete": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.bulkDelete": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades"], + }, + "grades.import": { + tags: ["grades"], + queryKeys: [["grades", "list"]], + paths: ["/teacher/grades", "/teacher/grades/entry"], + }, + "grades.draft.save": { + tags: ["grades"], + queryKeys: [["grades", "draft"]], + paths: ["/teacher/grades"], + }, + "grades.draft.delete": { + tags: ["grades"], + queryKeys: [["grades", "draft"]], + paths: [], + }, + "grades.appeal.create": { + tags: ["grades"], + queryKeys: [["grades", "appeals"]], + paths: ["/student/grades"], + }, + "grades.appeal.withdraw": { + tags: ["grades"], + queryKeys: [["grades", "appeals"]], + paths: ["/student/grades"], + }, + "grades.appeal.review": { + tags: ["grades"], + queryKeys: [["grades", "appeals"]], + paths: ["/teacher/grades", "/student/grades"], + }, + "grades.lock.acquire": { + tags: ["grades"], + queryKeys: [["grades", "lock"]], + paths: [], + }, + "grades.lock.renew": { + tags: ["grades"], + queryKeys: [["grades", "lock"]], + paths: [], + }, + "grades.lock.release": { + tags: ["grades"], + queryKeys: [["grades", "lock"]], + paths: [], + }, + + // ===== homework 模块 ===== + "homework.create": { + tags: ["homework"], + queryKeys: [["homework", "list"]], + paths: ["/teacher/homework/assignments", "/teacher/homework/submissions"], + }, + "homework.startSubmission": { + tags: ["homework"], + queryKeys: [["homework", "submissions"]], + paths: ["/student/learning/assignments"], + }, + "homework.saveAnswer": { + tags: ["homework"], + queryKeys: [["homework", "submissions"]], + paths: [], + }, + "homework.submit": { + tags: ["homework"], + queryKeys: [["homework", "submissions"]], + paths: ["/teacher/homework/submissions", "/student/learning/assignments"], + }, + "homework.grade": { + tags: ["homework"], + queryKeys: [["homework", "submissions"]], + paths: ["/teacher/homework/submissions"], + }, + "homework.batchAutoGrade": { + tags: ["homework"], + queryKeys: [["homework", "submissions"]], + paths: ["/teacher/homework/submissions", "/teacher/homework/assignments"], + }, + "homework.deleteScan": { + tags: ["homework"], + queryKeys: [["homework", "scans"]], + paths: [], + }, + "homework.remind": { + tags: ["homework"], + queryKeys: [["homework", "list"]], + paths: [], + }, + + // ===== invitation-codes 模块 ===== + "invitation-codes.generate": { + tags: ["invitation-codes"], + queryKeys: [["invitation-codes", "list"]], + paths: ["/admin/invitation-codes"], + }, + "invitation-codes.delete": { + tags: ["invitation-codes"], + queryKeys: [["invitation-codes", "list"]], + paths: ["/admin/invitation-codes"], + }, + "invitation-codes.validate": { + tags: ["invitation-codes"], + queryKeys: [["invitation-codes"]], + paths: [], + }, + + // ===== leave-requests 模块 ===== + "leave-requests.create": { + tags: ["leave-requests"], + queryKeys: [["leave-requests", "list"]], + paths: ["/parent/leave", "/student/leave", "/teacher/leave"], + }, + "leave-requests.review": { + tags: ["leave-requests"], + queryKeys: [["leave-requests", "list"]], + paths: ["/parent/leave", "/student/leave", "/teacher/leave"], + }, + "leave-requests.cancel": { + tags: ["leave-requests"], + queryKeys: [["leave-requests", "list"]], + paths: ["/parent/leave", "/student/leave", "/teacher/leave"], + }, + + // ===== lesson-preparation 模块 ===== + "lesson-preparation.create": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "list"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.update": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "detail"], ["lesson-preparation", "list"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.saveVersion": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "versions"]], + paths: [], + }, + "lesson-preparation.revertVersion": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "versions"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.delete": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "list"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.publish": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "detail"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.unpublish": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "detail"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.duplicate": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "list"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.template.save": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "templates"]], + paths: [], + }, + "lesson-preparation.template.delete": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "templates"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.formative.create": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "formative"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.formative.update": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "formative"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.formative.delete": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "formative"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.formative.submitResponse": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "formative"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.comment.create": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "comments"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.comment.update": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "comments"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.comment.toggleResolved": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "comments"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.comment.delete": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "comments"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.substitute.create": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "substitutes"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.substitute.updateStatus": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "substitutes"]], + paths: ["/teacher/lesson-plans"], + }, + "lesson-preparation.substitute.delete": { + tags: ["lesson-preparation"], + queryKeys: [["lesson-preparation", "substitutes"]], + paths: ["/teacher/lesson-plans"], + }, + + // ===== messaging 模块 ===== + "messaging.send": { + tags: ["messaging"], + queryKeys: [["messaging", "list"]], + paths: ["/messages"], + }, + "messaging.markRead": { + tags: ["messaging"], + queryKeys: [["messaging", "detail"], ["messaging", "unread"]], + paths: ["/messages"], + }, + "messaging.delete": { + tags: ["messaging"], + queryKeys: [["messaging", "list"]], + paths: ["/messages"], + }, + "messaging.toggleStar": { + tags: ["messaging"], + queryKeys: [["messaging", "detail"]], + paths: ["/messages"], + }, + "messaging.draft.save": { + tags: ["messaging"], + queryKeys: [["messaging", "drafts"]], + paths: ["/messages/compose"], + }, + "messaging.draft.delete": { + tags: ["messaging"], + queryKeys: [["messaging", "drafts"]], + paths: ["/messages"], + }, + "messaging.bulkMarkRead": { + tags: ["messaging"], + queryKeys: [["messaging", "list"], ["messaging", "unread"]], + paths: ["/messages"], + }, + "messaging.bulkDelete": { + tags: ["messaging"], + queryKeys: [["messaging", "list"]], + paths: ["/messages"], + }, + "messaging.bulkToggleStar": { + tags: ["messaging"], + queryKeys: [["messaging", "list"]], + paths: ["/messages"], + }, + "messaging.recall": { + tags: ["messaging"], + queryKeys: [["messaging", "detail"]], + paths: ["/messages"], + }, + "messaging.sendGroup": { + tags: ["messaging"], + queryKeys: [["messaging", "list"]], + paths: ["/messages", "/messages/compose"], + }, + "messaging.template.save": { + tags: ["messaging"], + queryKeys: [["messaging", "templates"]], + paths: ["/messages"], + }, + "messaging.template.delete": { + tags: ["messaging"], + queryKeys: [["messaging", "templates"]], + paths: ["/messages"], + }, + "messaging.report": { + tags: ["messaging"], + queryKeys: [["messaging", "detail"]], + paths: ["/messages"], + }, + "messaging.block": { + tags: ["messaging"], + queryKeys: [["messaging", "blocks"]], + paths: ["/messages"], + }, + "messaging.unblock": { + tags: ["messaging"], + queryKeys: [["messaging", "blocks"]], + paths: ["/messages"], + }, + + // ===== notifications 模块 ===== + "notifications.send": { + tags: ["notifications"], + queryKeys: [["notifications", "list"]], + paths: [], + }, + "notifications.sendClass": { + tags: ["notifications"], + queryKeys: [["notifications", "list"]], + paths: [], + }, + "notifications.markRead": { + tags: ["notifications"], + queryKeys: [["notifications", "detail"], ["notifications", "unread"]], + paths: ["/messages"], + }, + "notifications.markAllRead": { + tags: ["notifications"], + queryKeys: [["notifications", "list"], ["notifications", "unread"]], + paths: ["/messages"], + }, + "notifications.archive": { + tags: ["notifications"], + queryKeys: [["notifications", "list"]], + paths: ["/messages"], + }, + "notifications.updatePreferences": { + tags: ["notifications"], + queryKeys: [["notifications", "preferences"]], + paths: ["/settings"], + }, + + // ===== onboarding 模块 ===== + "onboarding.complete": { + tags: ["onboarding"], + queryKeys: [["onboarding", "status"]], + paths: ["/onboarding"], + }, + + // ===== proctoring 模块 ===== + "proctoring.recordEvent": { + tags: ["proctoring"], + queryKeys: [["proctoring", "events"]], + paths: ["/teacher/exams"], + }, + + // ===== questions 模块 ===== + "questions.create": { + tags: ["questions"], + queryKeys: [["questions", "list"]], + paths: ["/teacher/questions", "/admin/questions"], + }, + "questions.update": { + tags: ["questions"], + queryKeys: [["questions", "detail"], ["questions", "list"]], + paths: ["/teacher/questions", "/admin/questions"], + }, + "questions.delete": { + tags: ["questions"], + queryKeys: [["questions", "list"]], + paths: ["/teacher/questions", "/admin/questions"], + }, + "questions.deleteBatch": { + tags: ["questions"], + queryKeys: [["questions", "list"]], + paths: ["/teacher/questions", "/admin/questions"], + }, + "questions.import": { + tags: ["questions"], + queryKeys: [["questions", "list"]], + paths: ["/teacher/questions", "/admin/questions"], + }, + + // ===== rbac 模块 ===== + "rbac.role.create": { + tags: ["rbac"], + queryKeys: [["rbac", "roles"]], + paths: ["/admin/roles"], + }, + "rbac.role.update": { + tags: ["rbac"], + queryKeys: [["rbac", "roles"]], + paths: ["/admin/roles"], + }, + "rbac.role.delete": { + tags: ["rbac"], + queryKeys: [["rbac", "roles"]], + paths: ["/admin/roles"], + }, + "rbac.role.toggleEnabled": { + tags: ["rbac"], + queryKeys: [["rbac", "roles"]], + paths: ["/admin/roles"], + }, + "rbac.role.setPermissions": { + tags: ["rbac"], + queryKeys: [["rbac", "roles"]], + paths: ["/admin/roles"], + }, + "rbac.assignUserRoles": { + tags: ["rbac"], + queryKeys: [["rbac", "userRoles"]], + paths: ["/admin/users"], + }, + + // ===== scheduling 模块 ===== + "scheduling.saveRules": { + tags: ["scheduling"], + queryKeys: [["scheduling", "rules"]], + paths: ["/admin/scheduling/rules"], + }, + "scheduling.autoSchedule": { + tags: ["scheduling"], + queryKeys: [["scheduling", "list"]], + paths: ["/admin/scheduling/auto", "/teacher/classes/schedule"], + }, + "scheduling.applyAutoSchedule": { + tags: ["scheduling"], + queryKeys: [["scheduling", "changes"]], + paths: ["/teacher/schedule-changes", "/admin/scheduling/changes"], + }, + "scheduling.requestChange": { + tags: ["scheduling"], + queryKeys: [["scheduling", "changes"]], + paths: ["/admin/scheduling/changes", "/teacher/schedule-changes"], + }, + "scheduling.approveChange": { + tags: ["scheduling"], + queryKeys: [["scheduling", "changes"]], + paths: ["/admin/scheduling/changes", "/teacher/schedule-changes"], + }, + "scheduling.rejectChange": { + tags: ["scheduling"], + queryKeys: [["scheduling", "changes"]], + paths: ["/admin/scheduling/changes", "/teacher/schedule-changes"], + }, + + // ===== school 模块 ===== + "school.department.create": { + tags: ["school"], + queryKeys: [["school", "departments"]], + paths: ["/admin/school/departments"], + }, + "school.department.update": { + tags: ["school"], + queryKeys: [["school", "departments"]], + paths: ["/admin/school/departments"], + }, + "school.department.delete": { + tags: ["school"], + queryKeys: [["school", "departments"]], + paths: ["/admin/school/departments"], + }, + "school.academicYear.create": { + tags: ["school"], + queryKeys: [["school", "academicYears"]], + paths: ["/admin/school/academic-year"], + }, + "school.academicYear.update": { + tags: ["school"], + queryKeys: [["school", "academicYears"]], + paths: ["/admin/school/academic-year"], + }, + "school.academicYear.delete": { + tags: ["school"], + queryKeys: [["school", "academicYears"]], + paths: ["/admin/school/academic-year"], + }, + "school.school.create": { + tags: ["school"], + queryKeys: [["school", "schools"]], + paths: ["/admin/school/schools", "/admin/school/grades"], + }, + "school.school.update": { + tags: ["school"], + queryKeys: [["school", "schools"]], + paths: ["/admin/school/schools", "/admin/school/grades"], + }, + "school.school.delete": { + tags: ["school"], + queryKeys: [["school", "schools"]], + paths: ["/admin/school/schools", "/admin/school/grades"], + }, + "school.grade.create": { + tags: ["school"], + queryKeys: [["school", "grades"]], + paths: ["/admin/school/grades"], + }, + "school.grade.update": { + tags: ["school"], + queryKeys: [["school", "grades"]], + paths: ["/admin/school/grades"], + }, + "school.grade.delete": { + tags: ["school"], + queryKeys: [["school", "grades"]], + paths: ["/admin/school/grades"], + }, + "school.grade.promote": { + tags: ["school"], + queryKeys: [["school", "grades"]], + paths: ["/admin/school/grades"], + }, + + // ===== settings 模块 ===== + "settings.aiProvider.upsert": { + tags: ["settings"], + queryKeys: [["settings", "aiProviders"]], + paths: ["/admin/ai-settings", "/settings"], + }, + "settings.aiProvider.test": { + tags: ["settings"], + queryKeys: [["settings", "aiProviders"]], + paths: ["/admin/ai-settings", "/settings"], + }, + "settings.aiProvider.delete": { + tags: ["settings"], + queryKeys: [["settings", "aiProviders"]], + paths: ["/admin/ai-settings", "/settings"], + }, + "settings.avatar.update": { + tags: ["settings"], + queryKeys: [["settings", "avatar"]], + paths: ["/profile", "/settings"], + }, + "settings.avatar.remove": { + tags: ["settings"], + queryKeys: [["settings", "avatar"]], + paths: ["/profile", "/settings"], + }, + "settings.brand.save": { + tags: ["settings"], + queryKeys: [["settings", "brand"]], + paths: ["/admin/settings", "/(auth)/login", "/(auth)/register"], + }, + "settings.password.change": { + tags: ["settings"], + queryKeys: [["settings", "password"]], + paths: ["/settings"], + }, + "settings.security.setup2FA": { + tags: ["settings"], + queryKeys: [["settings", "security"]], + paths: ["/settings"], + }, + "settings.security.verify2FA": { + tags: ["settings"], + queryKeys: [["settings", "security"]], + paths: ["/settings"], + }, + "settings.security.disable2FA": { + tags: ["settings"], + queryKeys: [["settings", "security"]], + paths: ["/settings"], + }, + "settings.security.regenerateBackupCodes": { + tags: ["settings"], + queryKeys: [["settings", "security"]], + paths: ["/settings"], + }, + "settings.security.revokeSessions": { + tags: ["settings"], + queryKeys: [["settings", "security"]], + paths: ["/settings"], + }, + "settings.profile.update": { + tags: ["settings"], + queryKeys: [["settings", "profile"]], + paths: ["/settings"], + }, + "settings.notifications.updatePreferences": { + tags: ["settings"], + queryKeys: [["settings", "notificationPreferences"]], + paths: ["/settings"], + }, + "settings.systemSettings.save": { + tags: ["settings"], + queryKeys: [["settings", "system"]], + paths: ["/admin/settings"], + }, + + // ===== standards 模块 ===== + "standards.create": { + tags: ["standards"], + queryKeys: [["standards", "list"]], + paths: ["/admin/standards"], + }, + "standards.update": { + tags: ["standards"], + queryKeys: [["standards", "detail"], ["standards", "list"]], + paths: ["/admin/standards"], + }, + "standards.deactivate": { + tags: ["standards"], + queryKeys: [["standards", "list"]], + paths: ["/admin/standards"], + }, + "standards.linkPlan": { + tags: ["standards"], + queryKeys: [["standards", "planLinks"]], + paths: ["/teacher/lesson-plans"], + }, + "standards.unlinkPlan": { + tags: ["standards"], + queryKeys: [["standards", "planLinks"]], + paths: ["/teacher/lesson-plans"], + }, + + // ===== textbooks 模块 ===== + "textbooks.create": { + tags: ["textbooks"], + queryKeys: [["textbooks", "list"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.update": { + tags: ["textbooks"], + queryKeys: [["textbooks", "detail"], ["textbooks", "list"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.delete": { + tags: ["textbooks"], + queryKeys: [["textbooks", "list"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.chapter.create": { + tags: ["textbooks"], + queryKeys: [["textbooks", "chapters"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.chapter.update": { + tags: ["textbooks"], + queryKeys: [["textbooks", "chapters"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.chapter.delete": { + tags: ["textbooks"], + queryKeys: [["textbooks", "chapters"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.chapter.reorder": { + tags: ["textbooks"], + queryKeys: [["textbooks", "chapters"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.knowledgePoint.create": { + tags: ["textbooks"], + queryKeys: [["textbooks", "knowledgePoints"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.knowledgePoint.update": { + tags: ["textbooks"], + queryKeys: [["textbooks", "knowledgePoints"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.knowledgePoint.delete": { + tags: ["textbooks"], + queryKeys: [["textbooks", "knowledgePoints"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.prerequisite.create": { + tags: ["textbooks"], + queryKeys: [["textbooks", "prerequisites"]], + paths: ["/teacher/textbooks"], + }, + "textbooks.prerequisite.delete": { + tags: ["textbooks"], + queryKeys: [["textbooks", "prerequisites"]], + paths: ["/teacher/textbooks"], + }, + + // ===== users 模块 ===== + "users.update": { + tags: ["users"], + queryKeys: [["users", "detail"]], + paths: ["/profile", "/settings"], + }, + "users.import": { + tags: ["users"], + queryKeys: [["users", "list"]], + paths: ["/admin/users/import"], + }, + "users.delete": { + tags: ["users"], + queryKeys: [["users", "list"]], + paths: ["/admin/users"], + }, } as const satisfies Record export type InvalidationActionId = keyof typeof INVALIDATION_MAP