/** * 标题相关 API 函数 * Phase 1 新增:全局标题库 * 注意:后端 schema 使用 name + text 字段,前端 UI 用 content 展示 */ import apiClient from "../client" import type { BackendCreateTitleRequest, BackendTitleResponse, BackendUpdateTitleRequest, CreateTitleRequest, TitleItem, } from "./types" import { toTitleItem } from "./utils" /** 获取当前用户的所有标题 */ export const getTitles = async (): Promise => { const response = await apiClient.get<{ items: BackendTitleResponse[] } | BackendTitleResponse[]>( "/titles", ) // 兼容两种后端返回格式:{ items: [...] } 或直接 [...] const items = Array.isArray(response.data) ? response.data : response.data.items || [] return items.map(toTitleItem) } /** 创建标题 */ export const createTitle = async (data: CreateTitleRequest): Promise => { // 后端要求 name(≤255)和 text(≤500),name 从 content 截取 const payload: BackendCreateTitleRequest = { name: data.content.slice(0, 255), text: data.content.slice(0, 500), category: data.category || "default", } const response = await apiClient.post("/titles", payload) return toTitleItem(response.data) } /** 更新标题 */ export const updateTitle = async ( titleId: string, data: Partial, ): Promise => { const payload: BackendUpdateTitleRequest = {} if (data.content !== undefined) { payload.name = data.content.slice(0, 255) payload.text = data.content.slice(0, 500) } if (data.category !== undefined) { payload.category = data.category } // 后端用 PUT,非 PATCH const response = await apiClient.put(`/titles/${titleId}`, payload) return toTitleItem(response.data) } /** 删除标题 */ export const deleteTitle = async (titleId: string): Promise => { await apiClient.delete(`/titles/${titleId}`) } /** 批量导入标题 */ export const batchImportTitles = async (titles: string[]): Promise<{ imported_count: number }> => { const response = await apiClient.post("/titles/batch-import", { titles }) return response.data }