All files / src/api/service/group-service index.ts

41.3% Statements 38/92
100% Branches 1/1
9.09% Functions 1/11
41.3% Lines 38/92

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 92 931x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x                       6x 6x                                                       6x 6x 6x 6x     6x 6x     6x 6x     6x 6x     6x 6x     6x 6x     6x 6x     6x 6x     6x  
import { apiV2 } from '@/api/core';
import {
  CreateGroupPayload,
  CreateGroupResponse,
  GetGroupDetailsResponse,
  GetGroupsPayload,
  GetGroupsResponse,
  GetMyGroupsPayload,
  GetMyGroupsResponse,
  GroupIdParams,
  KickGroupMemberParams,
  PreUploadGroupImageResponse,
} from '@/types/service/group';
 
export const groupServiceRemote = () => ({
  // 모임 목록 조회 (GET /api/v2/groups)
  getGroups: async (payload: GetGroupsPayload): Promise<GetGroupsResponse> => {
    const params = new URLSearchParams();
    if (payload.keyword) {
      params.append('keyword', payload.keyword);
    }
    if (payload.cursor !== undefined) {
      params.append('cursor', payload.cursor.toString());
    }
    params.append('size', payload.size.toString());

    return apiV2.get<GetGroupsResponse>(`/groups?${params.toString()}`);
  },
  // 내 모임 목록 조회 (GET /api/v2/groups/me) :스케줄러 페이지
  getMyGroups: async (payload: GetMyGroupsPayload): Promise<GetMyGroupsResponse> => {
    const params = new URLSearchParams();
    params.append('type', payload.type);
    if (payload.cursor !== undefined) {
      params.append('cursor', payload.cursor.toString());
    }
    params.append('size', payload.size.toString());
    if (payload.filter) {
      params.append('filter', payload.filter);
    }
    if (payload.includeStatuses && payload.includeStatuses.length > 0) {
      payload.includeStatuses.forEach((status) => {
        params.append('includeStatuses', status);
      });
    }
    if (payload.excludeStatuses && payload.excludeStatuses.length > 0) {
      payload.excludeStatuses.forEach((status) => {
        params.append('excludeStatuses', status);
      });
    }
    if (payload.myStatuses && payload.myStatuses.length > 0) {
      payload.myStatuses.forEach((status) => {
        params.append('myStatuses', status);
      });
    }

    return apiV2.get<GetMyGroupsResponse>(`/groups/me?${params.toString()}`);
  },
 
  // 모임 이미지 사전 업로드 (POST /groups/images/upload) - multipart/form-data
 
  createGroup: (payload: CreateGroupPayload) => {
    return apiV2.post<CreateGroupResponse>('/groups/create', payload);
  },
 
  editGroup: (params: GroupIdParams, payload: CreateGroupPayload) => {
    return apiV2.patch<CreateGroupResponse>(`/groups/${params.groupId}`, payload);
  },
 
  getGroupDetails: (params: GroupIdParams) => {
    return apiV2.get<GetGroupDetailsResponse>(`/groups/${params.groupId}`);
  },
 
  attendGroup: (params: GroupIdParams) => {
    return apiV2.post<GetGroupDetailsResponse>(`/groups/${params.groupId}/attend`);
  },
 
  leaveGroup: (params: GroupIdParams) => {
    return apiV2.post<GetGroupDetailsResponse>(`/groups/${params.groupId}/left`);
  },
 
  deleteGroup: (params: GroupIdParams) => {
    return apiV2.delete(`/groups/${params.groupId}`);
  },
 
  kickGroupMember: (params: KickGroupMemberParams) => {
    return apiV2.post(`/groups/${params.groupId}/attendance/${params.targetUserId}/kick`);
  },
 
  uploadGroupImages: (payload: FormData) => {
    return apiV2.post<PreUploadGroupImageResponse>('/groups/images/upload', payload);
  },
});