import apiClient from './client'; import type { NewsArticle, NewsCategory, NewsTag, NewsListResponse, NewsCreateRequest, NewsUpdateRequest, NewsMediaUploadResponse, } from '../types/news'; export const newsApi = { // User endpoints getNews: async (params?: { category?: string; limit?: number; offset?: number; }): Promise => { const response = await apiClient.get('/cabinet/news', { params }); return response.data; }, getArticle: async (slug: string): Promise => { const response = await apiClient.get(`/cabinet/news/${encodeURIComponent(slug)}`); return response.data; }, // Admin endpoints getAdminNews: async (params?: { limit?: number; offset?: number }): Promise => { const response = await apiClient.get('/cabinet/admin/news', { params }); return response.data; }, getAdminArticle: async (id: number): Promise => { const response = await apiClient.get(`/cabinet/admin/news/${id}`); return response.data; }, createArticle: async (data: NewsCreateRequest): Promise => { const response = await apiClient.post('/cabinet/admin/news', data); return response.data; }, updateArticle: async (id: number, data: NewsUpdateRequest): Promise => { const response = await apiClient.put(`/cabinet/admin/news/${id}`, data); return response.data; }, deleteArticle: async (id: number): Promise => { await apiClient.delete(`/cabinet/admin/news/${id}`); }, togglePublish: async (id: number): Promise => { const response = await apiClient.post(`/cabinet/admin/news/${id}/publish`); return response.data; }, toggleFeatured: async (id: number): Promise => { const response = await apiClient.post(`/cabinet/admin/news/${id}/feature`); return response.data; }, uploadMedia: async (file: File, signal?: AbortSignal): Promise => { const formData = new FormData(); formData.append('file', file); const response = await apiClient.post( '/cabinet/admin/news/media/upload', formData, { signal }, ); return response.data; }, deleteMedia: async (filename: string): Promise => { await apiClient.delete(`/cabinet/admin/news/media/${encodeURIComponent(filename)}`); }, // Categories getCategories: async (): Promise => { const response = await apiClient.get('/cabinet/admin/news/categories'); return response.data; }, createCategory: async (data: { name: string; color: string }): Promise => { const response = await apiClient.post('/cabinet/admin/news/categories', data); return response.data; }, updateCategory: async ( id: number, data: { name?: string; color?: string }, ): Promise => { const response = await apiClient.put( `/cabinet/admin/news/categories/${id}`, data, ); return response.data; }, deleteCategory: async (id: number): Promise => { await apiClient.delete(`/cabinet/admin/news/categories/${id}`); }, // Tags getTags: async (): Promise => { const response = await apiClient.get('/cabinet/admin/news/tags'); return response.data; }, createTag: async (data: { name: string; color: string }): Promise => { const response = await apiClient.post('/cabinet/admin/news/tags', data); return response.data; }, updateTag: async (id: number, data: { name?: string; color?: string }): Promise => { const response = await apiClient.put(`/cabinet/admin/news/tags/${id}`, data); return response.data; }, deleteTag: async (id: number): Promise => { await apiClient.delete(`/cabinet/admin/news/tags/${id}`); }, };