148 lines
3.8 KiB
TypeScript
148 lines
3.8 KiB
TypeScript
import {
|
|
BlogCategory,
|
|
BlogListParams,
|
|
BlogPost,
|
|
BlogPostAndCategoriesDto,
|
|
CreateUpdateBlogCategoryDto,
|
|
CreateUpdateBlogPostDto,
|
|
} from '@/proxy/blog/blog'
|
|
import apiService from '@/services/api.service'
|
|
|
|
class BlogService {
|
|
async getPosts(params: BlogListParams = {}): Promise<BlogPostAndCategoriesDto> {
|
|
const response = await apiService.fetchData<BlogPostAndCategoriesDto>({
|
|
url: '/api/app/public/post-list',
|
|
method: 'GET',
|
|
params,
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async getPostBySlug(slug: string): Promise<BlogPost> {
|
|
const response = await apiService.fetchData<BlogPost>({
|
|
url: `/api/app/public/post-by-slug?slug=${slug}`,
|
|
method: 'GET',
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async createPost(data: CreateUpdateBlogPostDto): Promise<BlogPost> {
|
|
const response = await apiService.fetchData<BlogPost>({
|
|
url: '/api/app/blog/post',
|
|
method: 'POST',
|
|
data: data as any,
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async updatePost(id: string, data: CreateUpdateBlogPostDto): Promise<BlogPost> {
|
|
const response = await apiService.fetchData<BlogPost>({
|
|
url: `/api/app/blog/${id}/post`,
|
|
method: 'PUT',
|
|
data: data as any,
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async deletePost(id: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/${id}/post`,
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
|
|
async publishPost(id: string): Promise<BlogPost> {
|
|
const response = await apiService.fetchData<BlogPost>({
|
|
url: `/api/app/blog/${id}/publish-post`,
|
|
method: 'POST',
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async unpublishPost(id: string): Promise<BlogPost> {
|
|
const response = await apiService.fetchData<BlogPost>({
|
|
url: `/api/app/blog/${id}/unpublish-post`,
|
|
method: 'POST',
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async deleteComment(id: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/comments/${id}`,
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
|
|
async likePost(postId: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/${postId}/like-post`,
|
|
method: 'POST',
|
|
})
|
|
}
|
|
|
|
async unlikePost(postId: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/${postId}/unlike-post`,
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
|
|
async likeComment(commentId: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/comments/${commentId}/like`,
|
|
method: 'POST',
|
|
})
|
|
}
|
|
|
|
async unlikeComment(commentId: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/comments/${commentId}/like`,
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
|
|
async getTags(): Promise<string[]> {
|
|
const response = await apiService.fetchData<string[]>({
|
|
url: '/api/app/blog/tags',
|
|
method: 'GET',
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
// Category methods
|
|
async getCategory(id: string): Promise<BlogCategory> {
|
|
const response = await apiService.fetchData<BlogCategory>({
|
|
url: `/api/app/blog/${id}/category`,
|
|
method: 'GET',
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async createCategory(data: CreateUpdateBlogCategoryDto): Promise<BlogCategory> {
|
|
const response = await apiService.fetchData<BlogCategory>({
|
|
url: '/api/app/blog/category',
|
|
method: 'POST',
|
|
data: data as any,
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async updateCategory(id: string, data: CreateUpdateBlogCategoryDto): Promise<BlogCategory> {
|
|
const response = await apiService.fetchData<BlogCategory>({
|
|
url: `/api/app/blog/${id}/category`,
|
|
method: 'PUT',
|
|
data: data as any,
|
|
})
|
|
return response.data
|
|
}
|
|
|
|
async deleteCategory(id: string): Promise<void> {
|
|
await apiService.fetchData({
|
|
url: `/api/app/blog/${id}/category`,
|
|
method: 'DELETE',
|
|
})
|
|
}
|
|
}
|
|
|
|
export const blogService = new BlogService()
|