news-classifier/client/src/api/news.ts

108 lines
2.5 KiB
TypeScript

import { http } from '@/utils/request'
import type {
NewsDto,
NewsCreateDto,
NewsUpdateDto,
NewsQueryDto,
PageResult,
NewsStatistics
} from '@/types/api'
/**
* 新闻 API
*/
export const newsApi = {
/**
* 获取新闻列表
* @param params 查询参数
* @returns 分页新闻列表
*/
getList(params?: NewsQueryDto): Promise<PageResult<NewsDto>> {
return http.get('/v1/news/list', { params })
},
/**
* 获取新闻详情
* @param id 新闻ID
* @returns 新闻详情
*/
getById(id: number): Promise<NewsDto> {
return http.get(`/v1/news/${id}`)
},
/**
* 创建新闻(管理员权限)
* @param data 创建新闻请求参数
* @returns 创建的新闻
*/
create(data: NewsCreateDto): Promise<NewsDto> {
return http.post('/v1/news', data)
},
/**
* 更新新闻(管理员权限)
* @param data 更新新闻请求参数
* @returns 更新后的新闻
*/
update(data: NewsUpdateDto): Promise<NewsDto> {
return http.put('/v1/news', data)
},
/**
* 删除新闻(管理员权限)
* @param id 新闻ID
*/
delete(id: number): Promise<void> {
return http.delete(`/v1/news/${id}`)
},
/**
* 批量删除新闻(管理员权限)
* @param ids 新闻ID数组
*/
batchDelete(ids: number[]): Promise<void> {
return http.delete('/v1/news/batch', { data: ids })
},
/**
* 搜索新闻
* @param keyword 搜索关键词
* @param page 页码
* @param size 每页大小
* @returns 分页搜索结果
*/
search(keyword: string, page = 1, size = 20): Promise<PageResult<NewsDto>> {
return http.get('/v1/news/search', { params: { keyword, page, size } })
},
/**
* 按分类获取新闻
* @param categoryId 分类ID
* @param page 页码
* @param size 每页大小
* @returns 分页新闻列表
*/
getByCategory(categoryId: number, page = 1, size = 20): Promise<PageResult<NewsDto>> {
return http.get(`/v1/news/category/${categoryId}`, { params: { page, size } })
},
/**
* 获取最新新闻
* @param page 页码
* @param size 每页大小
* @returns 分页新闻列表
*/
getLatest(params: { page?: number; size?: number } = {}): Promise<PageResult<NewsDto>> {
const { page = 1, size = 20 } = params
return http.get('/v1/news/latest', { params: { page, size } })
},
/**
* 获取新闻统计数据
* @returns 新闻统计数据
*/
getStatistics(): Promise<NewsStatistics> {
return http.get('/v1/news/statistics')
}
}