File size: 2,570 Bytes
4bae792
 
 
 
 
 
57f5158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import api from "./api";

export const spaceService = {
  // Get all spaces
  getAll: () => api.get("/spaces"),

  // Get all spaces with rooms included
  getAllWithRooms: async () => {
    console.log("[spaceService.getAllWithRooms] ➡️  Calling GET /spaces/with-rooms");
    const startTime = performance.now();
    const response = await api.get("/spaces/with-rooms");
    const elapsed = Math.round(performance.now() - startTime);
    const spaces = response.data?.data || response.data?.spaces || response.data || [];
    console.log(`[spaceService.getAllWithRooms] ✅ Response in ${elapsed}ms`);
    console.log("  status:", response.status);
    console.log("  count:", spaces.length);
    console.log("  spaces (FULL):", spaces);
    console.log("  raw response:", response.data);
    return response;
  },

  // Get space by ID
  getById: (id) => api.get(`/spaces/${id}`),

  // Create new space
  create: (data) => api.post("/spaces", data),

  // Update space
  update: (id, data) => api.patch(`/spaces/${id}`, data),

  // Delete space
  delete: (id) => api.delete(`/spaces/${id}`),

  // Get rooms in a space
  getRooms: (id) => api.get(`/spaces/${id}/rooms`),

  // Upload space icon/image
  uploadIcon: (id, file) => {
    const formData = new FormData();
    formData.append("icon", file);
    return api.post(`/spaces/${id}/icon`, formData, {
      headers: { "Content-Type": "multipart/form-data" },
    });
  },

  // Remove space icon
  removeIcon: (id) => api.delete(`/spaces/${id}/icon`),

  // Get space members
  getMembers: (id) => api.get(`/spaces/${id}/members`),

  // Add member to space
  addMember: (id, userId) => api.post(`/spaces/${id}/members`, { userId }),

  // Remove member from space
  removeMember: (id, userId) => api.delete(`/spaces/${id}/members/${userId}`),

  // Update member role in space
  updateMemberRole: (id, userId, role) =>
    api.patch(`/spaces/${id}/members/${userId}/role`, { role }),

  // Generate invite code/link
  generateInviteCode: (id) => api.post(`/spaces/${id}/invite`),

  // Join space by invite code
  joinByInviteCode: (code) => api.post(`/spaces/join/${code}`),

  // Get space settings
  getSettings: (id) => api.get(`/spaces/${id}/settings`),

  // Update space settings
  updateSettings: (id, data) => api.patch(`/spaces/${id}/settings`, data),

  // Leave space
  leave: (id) => api.post(`/spaces/${id}/leave`),

  // Get space statistics
  getStats: (id) => api.get(`/spaces/${id}/stats`),

  // Search spaces
  search: (query) => api.get("/spaces/search", { params: { q: query } }),
};