Spaces:
Configuration error
Configuration error
import { Chat, Message, CreateChatRequest, SendMessageData, PaginatedResponse } from '../../../shared/types' | |
import { apiService } from './api' | |
class ChatService { | |
// Chat management | |
async getChats(): Promise<Chat[]> { | |
return await apiService.get<Chat[]>('/api/chats') | |
} | |
async getChat(chatId: string): Promise<Chat> { | |
return await apiService.get<Chat>(`/api/chats/${chatId}`) | |
} | |
async createChat(data: CreateChatRequest): Promise<Chat> { | |
return await apiService.post<Chat>('/api/chats', data) | |
} | |
async updateChat(chatId: string, data: Partial<Chat>): Promise<Chat> { | |
return await apiService.put<Chat>(`/api/chats/${chatId}`, data) | |
} | |
async deleteChat(chatId: string): Promise<void> { | |
await apiService.delete(`/api/chats/${chatId}`) | |
} | |
async leaveChat(chatId: string): Promise<void> { | |
await apiService.post(`/api/chats/${chatId}/leave`) | |
} | |
// Message management | |
async getMessages(chatId: string, page = 1, limit = 50): Promise<Message[]> { | |
const response = await apiService.get<PaginatedResponse<Message>>( | |
`/api/chats/${chatId}/messages?page=${page}&limit=${limit}` | |
) | |
return response.data | |
} | |
async sendMessage(chatId: string, data: Omit<SendMessageData, 'chatId'>): Promise<Message> { | |
if (data.attachments && data.attachments.length > 0) { | |
// Upload files first | |
const uploadedFiles = await this.uploadFiles(data.attachments) | |
return await apiService.post<Message>(`/api/chats/${chatId}/messages`, { | |
content: data.content, | |
type: data.type, | |
attachments: uploadedFiles, | |
replyTo: data.replyTo, | |
}) | |
} else { | |
return await apiService.post<Message>(`/api/chats/${chatId}/messages`, { | |
content: data.content, | |
type: data.type, | |
replyTo: data.replyTo, | |
}) | |
} | |
} | |
async editMessage(messageId: string, content: string): Promise<Message> { | |
return await apiService.put<Message>(`/api/messages/${messageId}`, { content }) | |
} | |
async deleteMessage(messageId: string): Promise<void> { | |
await apiService.delete(`/api/messages/${messageId}`) | |
} | |
async addReaction(messageId: string, emoji: string): Promise<void> { | |
await apiService.post(`/api/messages/${messageId}/reactions`, { emoji }) | |
} | |
async removeReaction(messageId: string, emoji: string): Promise<void> { | |
await apiService.delete(`/api/messages/${messageId}/reactions/${emoji}`) | |
} | |
// Group management | |
async addMember(chatId: string, userId: string): Promise<void> { | |
await apiService.post(`/api/chats/${chatId}/members`, { userId }) | |
} | |
async removeMember(chatId: string, userId: string): Promise<void> { | |
await apiService.delete(`/api/chats/${chatId}/members/${userId}`) | |
} | |
async updateMemberRole(chatId: string, userId: string, role: string): Promise<void> { | |
await apiService.put(`/api/chats/${chatId}/members/${userId}`, { role }) | |
} | |
async getChatMembers(chatId: string): Promise<any[]> { | |
return await apiService.get(`/api/chats/${chatId}/members`) | |
} | |
// File upload | |
async uploadFiles(files: File[]): Promise<any[]> { | |
const uploadPromises = files.map(file => this.uploadFile(file)) | |
return await Promise.all(uploadPromises) | |
} | |
async uploadFile(file: File): Promise<any> { | |
return await apiService.upload('/api/upload', file) | |
} | |
// Search | |
async searchMessages(query: string, chatId?: string): Promise<Message[]> { | |
const params = new URLSearchParams({ q: query }) | |
if (chatId) { | |
params.append('chatId', chatId) | |
} | |
return await apiService.get<Message[]>(`/api/search/messages?${params}`) | |
} | |
async searchChats(query: string): Promise<Chat[]> { | |
return await apiService.get<Chat[]>(`/api/search/chats?q=${encodeURIComponent(query)}`) | |
} | |
// Chat settings | |
async updateChatSettings(chatId: string, settings: any): Promise<void> { | |
await apiService.put(`/api/chats/${chatId}/settings`, settings) | |
} | |
async getChatSettings(chatId: string): Promise<any> { | |
return await apiService.get(`/api/chats/${chatId}/settings`) | |
} | |
// Notifications | |
async markAsRead(chatId: string): Promise<void> { | |
await apiService.post(`/api/chats/${chatId}/read`) | |
} | |
async muteChat(chatId: string, duration?: number): Promise<void> { | |
await apiService.post(`/api/chats/${chatId}/mute`, { duration }) | |
} | |
async unmuteChat(chatId: string): Promise<void> { | |
await apiService.post(`/api/chats/${chatId}/unmute`) | |
} | |
} | |
export const chatService = new ChatService() | |