File size: 2,086 Bytes
4bae792
 
 
8c762ac
4bae792
8c762ac
 
4bae792
8c762ac
12a94f6
57f5158
 
12a94f6
57f5158
 
 
 
 
 
 
 
12a94f6
 
 
4bae792
8c762ac
4bae792
8c762ac
 
 
4bae792
8c762ac
 
 
4bae792
8c762ac
 
4bae792
8c762ac
4bae792
8c762ac
 
 
4bae792
8c762ac
4bae792
8c762ac
 
4c47e22
 
 
 
 
 
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
import api from "./api";

export const dmService = {
  // === Conversations ===

  /** Create or get existing conversation with a user */
  createOrGetConversation: (userId) => api.post("/dms", { userId }),

  /** Get list of conversations */
  getConversations: async (params) => {
    console.log("[dmService.getConversations] ➡️  Calling GET /dms with params:", params);
    const startTime = performance.now();
    const response = await api.get("/dms", { params });
    const elapsed = Math.round(performance.now() - startTime);
    const conversations = response.data?.data || response.data?.conversations || response.data || [];
    console.log(`[dmService.getConversations] ✅ Response in ${elapsed}ms:`, {
      status: response.status,
      count: conversations.length,
      ids: conversations.map((c) => c.id),
      names: conversations.map((c) => c.other_user?.display_name || c.other_user?.username || "Unknown"),
      raw: response.data,
    });
    return response;
  },

  // === Messages ===

  /** Get messages in a conversation */
  getMessages: (conversationId, params) =>
    api.get(`/dms/${conversationId}/messages`, { params }),

  /** Send message via REST (fallback when WS unavailable) */
  sendMessage: (conversationId, data) =>
    api.post(`/dms/${conversationId}/messages`, data),

  /** Mark conversation as read */
  markAsRead: (conversationId) => api.post(`/dms/${conversationId}/read`),

  // === Block ===

  blockUser: (userId) => api.post(`/dms/block/${userId}`),
  unblockUser: (userId) => api.delete(`/dms/block/${userId}`),
  getBlockedUsers: () => api.get("/dms/blocked/list"),

  // === User Search ===

  searchUsers: (query) => api.get("/users/search", { params: { q: query } }),
  getUserProfile: (userId) => api.get(`/users/${userId}`),

  // 🆕 Batch status — one call for multiple users (replaces getUserStatus polling)
  getUsersStatus: (userIds) => api.post("/users/status", { userIds }),

  // ❌ DEPRECATED: Use WebSocket + getUsersStatus instead
  // getUserStatus: (userId) => api.get(`/users/${userId}/status`),
};