You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
3.4 KiB

// api/post.ts
import request from './request'
import type { Post, PostListParams, PostListResponse } from '@/views/post'
export const postApi = {
// 获取我的帖子列表
getMyPosts(params: PostListParams): Promise<PostListResponse> {
return request({
url: '/posts/my-posts',
method: 'GET',
params
})
},
// 获取帖子详情
getPostDetail(id: number): Promise<Post> {
return request({
url: `/posts/${id}`,
method: 'GET'
})
},
// 创建帖子
createPost(data: Partial<Post>): Promise<Post> {
return request({
url: '/posts',
method: 'POST',
data
})
},
// 更新帖子
updatePost(id: number, data: Partial<Post>): Promise<Post> {
return request({
url: `/posts/${id}`,
method: 'PUT',
data
})
},
// 删除单个帖子
deletePost(id: number): Promise<void> {
return request({
url: `/posts/${id}`,
method: 'DELETE'
})
},
// 批量删除帖子
batchDeletePosts(ids: number[]): Promise<void> {
return request({
url: '/posts/batch-delete',
method: 'DELETE',
data: { ids }
})
},
// 发布帖子(从草稿状态发布)
publishPost(id: number): Promise<Post> {
return request({
url: `/posts/${id}/publish`,
method: 'POST'
})
},
// 将帖子设为草稿
draftPost(id: number): Promise<Post> {
return request({
url: `/posts/${id}/draft`,
method: 'POST'
})
},
// 获取帖子统计信息
getPostStats(): Promise<{
totalPosts: number
totalViews: number
totalLikes: number
totalComments: number
todayPosts: number
weekPosts: number
monthPosts: number
}> {
return request({
url: '/posts/stats',
method: 'GET'
})
},
// 点赞帖子
likePost(id: number): Promise<{ liked: boolean; likesCount: number }> {
return request({
url: `/posts/${id}/like`,
method: 'POST'
})
},
// 取消点赞
unlikePost(id: number): Promise<{ liked: boolean; likesCount: number }> {
return request({
url: `/posts/${id}/unlike`,
method: 'POST'
})
},
// 增加浏览量
increaseViews(id: number): Promise<{ views: number }> {
return request({
url: `/posts/${id}/view`,
method: 'POST'
})
},
// 搜索帖子
searchPosts(params: {
keyword: string
category?: string
page?: number
pageSize?: number
}): Promise<PostListResponse> {
return request({
url: '/posts/search',
method: 'GET',
params
})
},
// 获取热门帖子
getHotPosts(params: {
period?: 'day' | 'week' | 'month'
limit?: number
} = {}): Promise<Post[]> {
return request({
url: '/posts/hot',
method: 'GET',
params
})
},
// 获取推荐帖子
getRecommendedPosts(limit = 10): Promise<Post[]> {
return request({
url: '/posts/recommended',
method: 'GET',
params: { limit }
})
}
}
//