mxivideo/src/services/resourceCategoryService.ts

142 lines
3.8 KiB
TypeScript

import { invoke } from '@tauri-apps/api/core'
export interface ResourceCategory {
id: string
title: string
ai_prompt: string
color: string
created_at: string
updated_at: string
is_active: boolean
}
export interface CreateCategoryRequest {
title: string
ai_prompt: string
color: string
}
export interface UpdateCategoryRequest {
title?: string
ai_prompt?: string
color?: string
is_active?: boolean
}
export interface ApiResponse<T> {
status: boolean
data?: T
msg?: string
}
export class ResourceCategoryService {
/**
* 获取所有分类
*/
static async getAllCategories(): Promise<ApiResponse<ResourceCategory[]>> {
try {
const result = await invoke('get_all_resource_categories')
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<ResourceCategory[]>
} catch (error) {
console.error('Failed to get all categories:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
/**
* 根据ID获取分类
*/
static async getCategoryById(categoryId: string): Promise<ApiResponse<ResourceCategory>> {
try {
const result = await invoke('get_resource_category_by_id', { categoryId })
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<ResourceCategory>
} catch (error) {
console.error('Failed to get category by id:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
/**
* 创建新分类
*/
static async createCategory(request: CreateCategoryRequest): Promise<ApiResponse<ResourceCategory>> {
try {
const result = await invoke('create_resource_category', { request })
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<ResourceCategory>
} catch (error) {
console.error('Failed to create category:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
static tryJsonParse(str: any) {
try {
if (typeof str === 'string') {
return JSON.parse(str)
}
return str;
} catch (e) {
return str;
}
}
/**
* 更新分类
*/
static async updateCategory(
categoryId: string,
request: UpdateCategoryRequest
): Promise<ApiResponse<ResourceCategory>> {
try {
const result = await invoke('update_resource_category', { categoryId, request })
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<ResourceCategory>
} catch (error) {
console.error('Failed to update category:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
/**
* 删除分类
*/
static async deleteCategory(categoryId: string): Promise<ApiResponse<boolean>> {
try {
const result = await invoke('delete_resource_category', { categoryId })
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<boolean>
} catch (error) {
console.error('Failed to delete category:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
/**
* 搜索分类
*/
static async searchCategories(keyword: string): Promise<ApiResponse<ResourceCategory[]>> {
try {
const result = await invoke('search_resource_categories', { keyword })
return { status: true, msg: 'ok', data: this.tryJsonParse(result) } as ApiResponse<ResourceCategory[]>
} catch (error) {
console.error('Failed to search categories:', error)
return {
status: false,
msg: error instanceof Error ? error.message : 'Unknown error'
}
}
}
}