duoqi-admin/src/lib/api/skill-tree-api.ts

50 lines
1.6 KiB
TypeScript

import { apiClient } from "@/lib/api-client"
import type { PaginatedResponse, ApiResponse } from "@/types/api"
import type { SkillTreeChapter, SkillTreeFormData } from "@/types/skill-tree"
export interface FetchChaptersParams {
page?: number
limit?: number
categoryId?: string
}
export async function fetchChapters(
params: FetchChaptersParams = {}
): Promise<PaginatedResponse<SkillTreeChapter>> {
const searchParams = new URLSearchParams()
if (params.page) searchParams.set("page", String(params.page))
if (params.limit) searchParams.set("limit", String(params.limit))
if (params.categoryId) searchParams.set("categoryId", params.categoryId)
return apiClient
.get("skill-tree", { searchParams })
.json<PaginatedResponse<SkillTreeChapter>>()
}
export async function createChapter(
data: SkillTreeFormData
): Promise<ApiResponse<SkillTreeChapter>> {
return apiClient.post("skill-tree", { json: data }).json<ApiResponse<SkillTreeChapter>>()
}
export async function updateChapter(
id: string,
data: Partial<SkillTreeFormData>
): Promise<ApiResponse<SkillTreeChapter>> {
return apiClient
.put(`skill-tree/${id}`, { json: data })
.json<ApiResponse<SkillTreeChapter>>()
}
export async function deleteChapter(id: string): Promise<ApiResponse<{ id: string }>> {
return apiClient.delete(`skill-tree/${id}`).json<ApiResponse<{ id: string }>>()
}
export async function reorderChapters(
items: { id: string; sortOrder: number }[]
): Promise<ApiResponse<void>> {
return apiClient
.patch("skill-tree/reorder", { json: { items } })
.json<ApiResponse<void>>()
}