import api from "./api"; export const messageService = { // Get messages in a room getMessages: (roomId, params) => api.get(`/rooms/${roomId}/messages`, { params }), // Send message sendMessage: (roomId, data) => api.post(`/rooms/${roomId}/messages`, data), // Update message updateMessage: (roomId, messageId, data) => api.patch(`/rooms/${roomId}/messages/${messageId}`, data), // Delete message deleteMessage: (roomId, messageId) => api.delete(`/rooms/${roomId}/messages/${messageId}`), // Add reaction addReaction: (roomId, messageId, emoji) => api.post(`/rooms/${roomId}/messages/${messageId}/reactions`, { emoji }), // Remove reaction removeReaction: (roomId, messageId, emoji) => api.delete(`/rooms/${roomId}/messages/${messageId}/reactions/${emoji}`), // Reply to message reply: (roomId, data) => api.post(`/rooms/${roomId}/messages/reply`, data), // Upload file/attachment with message uploadFile: (roomId, file) => { const formData = new FormData(); formData.append("file", file); return api.post(`/rooms/${roomId}/messages/upload`, formData, { headers: { "Content-Type": "multipart/form-data" }, }); }, // Upload file to storage and get back URL (POST /files) uploadFileToStorage: (file, options = {}) => { const formData = new FormData(); formData.append("file", file); if (options.roomId) formData.append("roomId", options.roomId); // Don't set Content-Type manually — let axios set it with the correct boundary for multipart return api.post("/files", formData); }, // Pin a message pinMessage: (roomId, messageId) => api.post(`/rooms/${roomId}/messages/${messageId}/pin`), // Unpin a message unpinMessage: (roomId, messageId) => api.delete(`/rooms/${roomId}/messages/${messageId}/pin`), // Get pinned messages getPinnedMessages: (roomId) => api.get(`/rooms/${roomId}/messages/pinned`), // Mark messages as read markAsRead: (roomId) => api.post(`/rooms/${roomId}/messages/read`), // Get unread message count getUnreadCount: (roomId) => api.get(`/rooms/${roomId}/messages/unread-count`), // Get message by ID getById: (roomId, messageId) => api.get(`/rooms/${roomId}/messages/${messageId}`), // Forward message to another room forwardMessage: (roomId, messageId, targetRoomId) => api.post(`/rooms/${roomId}/messages/${messageId}/forward`, { targetRoomId, }), // Get message thread/replies getThread: (roomId, messageId, params) => api.get(`/rooms/${roomId}/messages/${messageId}/thread`, { params }), // Send message with thread reply sendThreadReply: (roomId, messageId, data) => api.post(`/rooms/${roomId}/messages/${messageId}/thread`, data), // Search messages in a room search: (roomId, query) => api.get(`/rooms/${roomId}/messages/search`, { params: { q: query } }), // Get message history (for infinite scroll) getHistory: (roomId, params) => api.get(`/rooms/${roomId}/messages/history`, { params }), };