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> { return http.get('/v1/news/list', { params }) }, /** * 获取新闻详情 * @param id 新闻ID * @returns 新闻详情 */ getById(id: number): Promise { return http.get(`/v1/news/${id}`) }, /** * 创建新闻(管理员权限) * @param data 创建新闻请求参数 * @returns 创建的新闻 */ create(data: NewsCreateDto): Promise { return http.post('/v1/news', data) }, /** * 更新新闻(管理员权限) * @param data 更新新闻请求参数 * @returns 更新后的新闻 */ update(data: NewsUpdateDto): Promise { return http.put('/v1/news', data) }, /** * 删除新闻(管理员权限) * @param id 新闻ID */ delete(id: number): Promise { return http.delete(`/v1/news/${id}`) }, /** * 批量删除新闻(管理员权限) * @param ids 新闻ID数组 */ batchDelete(ids: number[]): Promise { return http.delete('/v1/news/batch', { data: ids }) }, /** * 搜索新闻 * @param keyword 搜索关键词 * @param page 页码 * @param size 每页大小 * @returns 分页搜索结果 */ search(keyword: string, page = 1, size = 20): Promise> { 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> { return http.get(`/v1/news/category/${categoryId}`, { params: { page, size } }) }, /** * 获取最新新闻 * @param page 页码 * @param size 每页大小 * @returns 分页新闻列表 */ getLatest(params: { page?: number; size?: number } = {}): Promise> { const { page = 1, size = 20 } = params return http.get('/v1/news/latest', { params: { page, size } }) }, /** * 获取新闻统计数据 * @returns 新闻统计数据 */ getStatistics(): Promise { return http.get('/v1/news/statistics') } }