feat(cache): 新增 query-keys.ts 工厂(classes 模块)

This commit is contained in:
SpecialX
2026-07-05 17:56:04 +08:00
parent 2d49f1bad8
commit e510f191c9

View File

@@ -0,0 +1,39 @@
/**
* 客户端 queryKey 工厂。
*
* 命名约定:[module, resource, ...args]
* - 第一段:模块名(与 src/modules/[module]/ 一致)
* - 第二段资源名list / detail / students / schedule / stats
* - 后续段唯一标识id / classId或过滤条件对象
*
* 失效时使用前缀匹配:
* invalidateQueries({ queryKey: ["classes", "detail"] })
* → 失效所有 ["classes", "detail", *]
*/
export interface ClassFilters {
readonly search?: string
readonly subject?: string
readonly gradeId?: string
}
export const queryKeys = {
classes: {
all: () => ["classes"] as const,
lists: () => [...queryKeys.classes.all(), "list"] as const,
list: (filters: ClassFilters) => [...queryKeys.classes.lists(), filters] as const,
details: () => [...queryKeys.classes.all(), "detail"] as const,
detail: (id: string) => [...queryKeys.classes.details(), id] as const,
students: (classId: string) =>
[...queryKeys.classes.all(), "students", classId] as const,
schedule: (classId: string) =>
[...queryKeys.classes.all(), "schedule", classId] as const,
stats: (classId: string) =>
[...queryKeys.classes.all(), "stats", classId] as const,
invitations: (classId: string) =>
[...queryKeys.classes.all(), "invitations", classId] as const,
},
// 后续模块按此模式扩展...
} as const
export type QueryKeys = typeof queryKeys