blob: d62482148b0020bf4ade2fcade609365754c7f09 [file] [log] [blame]
import axios from 'axios';
import type { Work, WorkResponse, WorkFormData, BugReport, Discussion } from './otherType';
const API_BASE_URL = '/api';
class WorkAPI {
/**
* 获取作品列表(支持分页、分类筛选和搜索)
*/
static getWorks(params?: {
categoryId?: number;
page?: number;
size?: number;
search?: string;
}): Promise<WorkResponse> {
return axios.get<WorkResponse>(`${API_BASE_URL}/works`, { params })
.then(response => response.data);
}
/**
* 获取单个作品详情
*/
static getWorkById(id: number): Promise<Work> {
return axios.get<Work>(`${API_BASE_URL}/works/${id}`)
.then(response => response.data);
}
/**
* 创建新作品
*/
static createWork(data: WorkFormData): Promise<Work> {
return axios.post<Work>(`${API_BASE_URL}/works`, data)
.then(response => response.data);
}
/**
* 更新作品信息
*/
static updateWork(id: number, data: WorkFormData): Promise<Work> {
return axios.put<Work>(`${API_BASE_URL}/works/${id}`, data)
.then(response => response.data);
}
/**
* 删除作品
*/
static deleteWork(id: number): Promise<void> {
return axios.delete(`${API_BASE_URL}/works/${id}`);
}
/**
* 点赞作品
*/
static likeWork(id: number): Promise<void> {
return axios.post(`${API_BASE_URL}/works/${id}/like`);
}
/**
* 根据作者查询作品
*/
static getWorksByAuthor(author: string): Promise<Work[]> {
return axios.get<Work[]>(`${API_BASE_URL}/works/byAuthor`, { params: { author } })
.then(response => response.data);
}
/**
* 获取作品Bug反馈列表
*/
static getBugReports(workId: number): Promise<BugReport[]> {
return axios.get<BugReport[]>(`${API_BASE_URL}/works/${workId}/bugs`)
.then(response => response.data);
}
/**
* 提交Bug反馈
*/
static reportBug(workId: number, data: {
title: string;
description: string;
severity: 'low' | 'medium' | 'high';
}): Promise<void> {
return axios.post(`${API_BASE_URL}/works/${workId}/bugs`, data);
}
/**
* 获取作品讨论区列表
*/
static getDiscussions(workId: number): Promise<Discussion[]> {
return axios.get<Discussion[]>(`${API_BASE_URL}/works/${workId}/discussions`)
.then(response => response.data);
}
/**
* 创建新讨论
*/
static createDiscussion(data: {
workId: number;
title: string;
content: string;
}): Promise<void> {
return axios.post(`${API_BASE_URL}/discussions`, data);
}
}
export default WorkAPI;