feat(cache): 新增 query-keys.ts 工厂(classes 模块)
This commit is contained in:
39
src/shared/lib/query-keys.ts
Normal file
39
src/shared/lib/query-keys.ts
Normal 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
|
||||
Reference in New Issue
Block a user