File size: 3,032 Bytes
4bae792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1835767
 
 
 
 
ed21910
 
1835767
 
4bae792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 }),
};