nakama/frontend/src/utils/api.js

178 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios'
// API URL из переменных окружения
const API_URL = import.meta.env.VITE_API_URL || (
import.meta.env.DEV
? 'http://localhost:3000/api'
: '/api' // Для production используем относительный путь
)
// Создать инстанс axios с настройками
const api = axios.create({
baseURL: API_URL,
withCredentials: true,
headers: {
'Content-Type': 'application/json'
}
})
// Auth API
export const signInWithTelegram = async (initData) => {
const response = await api.post('/auth/signin', { initData })
return response.data.user
}
export const verifyAuth = async () => {
const response = await api.post('/auth/verify')
return response.data.user
}
// Авторизация через Telegram OAuth (Login Widget)
// Posts API
export const getPosts = async (params = {}) => {
const response = await api.get('/posts', { params })
return response.data
}
export const createPost = async (formData) => {
const response = await api.post('/posts', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
return response.data.post
}
export const likePost = async (postId) => {
const response = await api.post(`/posts/${postId}/like`)
return response.data
}
export const commentPost = async (postId, content) => {
const response = await api.post(`/posts/${postId}/comment`, { content })
return response.data
}
export const editPost = async (postId, data) => {
const response = await api.put(`/posts/${postId}`, data)
return response.data.post
}
export const editComment = async (postId, commentId, content) => {
const response = await api.put(`/posts/${postId}/comments/${commentId}`, { content })
return response.data
}
export const deleteComment = async (postId, commentId) => {
const response = await api.delete(`/posts/${postId}/comments/${commentId}`)
return response.data
}
export const repostPost = async (postId) => {
const response = await api.post(`/posts/${postId}/repost`)
return response.data
}
export const deletePost = async (postId) => {
const response = await api.delete(`/posts/${postId}`)
return response.data
}
// Users API
export const getUserProfile = async (userId) => {
const response = await api.get(`/users/${userId}`)
return response.data.user
}
export const getUserPosts = async (userId, params = {}) => {
const response = await api.get(`/users/${userId}/posts`, { params })
return response.data
}
export const followUser = async (userId) => {
const response = await api.post(`/users/${userId}/follow`)
return response.data
}
export const updateProfile = async (data) => {
const response = await api.put('/users/profile', data)
return response.data
}
export const searchUsers = async (query) => {
const response = await api.get(`/users/search/${query}`)
return response.data.users
}
// Notifications API
export const getNotifications = async (params = {}) => {
const response = await api.get('/notifications', { params })
return response.data
}
export const markNotificationRead = async (notificationId) => {
const response = await api.put(`/notifications/${notificationId}/read`)
return response.data
}
export const markAllNotificationsRead = async () => {
const response = await api.put('/notifications/read-all')
return response.data
}
// Search API
export const searchFurry = async (query, params = {}) => {
const response = await api.get('/search/furry', { params: { query, ...params } })
return response.data.posts
}
export const searchAnime = async (query, params = {}) => {
const response = await api.get('/search/anime', { params: { query, ...params } })
return response.data.posts
}
export const getFurryTags = async (query) => {
const response = await api.get('/search/furry/tags', { params: { query } })
return response.data.tags
}
export const getAnimeTags = async (query) => {
const response = await api.get('/search/anime/tags', { params: { query } })
return response.data.tags
}
// Moderation API
export const reportPost = async (postId, reason) => {
const response = await api.post('/moderation/report', { postId, reason })
return response.data
}
export const getReports = async (params = {}) => {
const response = await api.get('/moderation/reports', { params })
return response.data
}
export const updateReport = async (reportId, data) => {
const response = await api.put(`/moderation/reports/${reportId}`, data)
return response.data
}
export const setPostNSFW = async (postId, isNSFW) => {
const response = await api.put(`/moderation/posts/${postId}/nsfw`, { isNSFW })
return response.data
}
export const banUser = async (userId, banned, days) => {
const response = await api.put(`/moderation/users/${userId}/ban`, { banned, days })
return response.data
}
// Bot API
export const sendPhotoToTelegram = async (photoUrl) => {
const response = await api.post('/bot/send-photo', { photoUrl })
return response.data
}
export default api