[보드픽] API → Mock up Data로 변경 (1)

zzincode·2025년 4월 24일

스위프

목록 보기
11/12
post-thumbnail

서버 이슈로 인해 보드게임 관련 데이터를 Mock up data로 변경해야했다.
일단은 token이 사용되지 않는 요소들 먼저 변경하였다.

api 이름url대체 여부
보드게임 이름 검색/api/boardgames/search
보드게임 상세보기/api/boardgames/{보드게임id}
보드게임 카테고리 필터링/api/boardgames?category={보드게임 카테고리}
2인 게임(Top10)api/boardgames/list?filter=duo
쉬운 게임(Top10)api/boardgames/list?filter=difficulty
단체 게임(Top10)api/boardgames/list?filter=players
비슷한 게임/api/boardgames/similar/{보드게임id}

1. 보드게임 이름 검색 (getSearchResult)

  • 사용자가 입력한 검색어가 이름에 포함된 보드게임 검색
      export const getSearchResult = (keyword) => {
        const data = boardGameData.filter((item) => item.name.includes(keyword));
        return data;
      };

2. 카테고리 보드게임 조회 (getCategorySelect)

  • 카테고리 필터를 통해 보드게임 조회
    export const getCategorySelect = (name) => {
      return boardGameData.filter((game) =>
        game.boardGameCategories.includes(name)
      );
    };

3. 보드게임 상세보기(getBoardGameDetail)

  • 특정 보드게임에 대한 정보들 모아보기
    ```jsx
    export const getBoardGameDetail = (id) => {
      const data = boardGameData.find((item) => item.id === Number(id));
      return data;
    };
    ```

    ✅ 고유한 값을 기준으로 객체를 하나씩 가져와야하기에 find()를 쓰는 것이 적합
    ⚠️ filter()를 사용하면 배열에 감싸져 반환되기 때문에 인덱스를 지정해서 접근해야하며 배열이 비여있는 경우 undefined되어 에러 발생

4. top10 리스트 - 둘이서/초보자/단체 (getDuoData/getPlayerData/getDifficultyData)

  • 각종 filter에 대한 TOP5 리스트 반환 (데이터량 축소에 따라 TOP5만 출력하도록 변경)

    export const getDuoData = () => {
      return boardGameData.filter((game) => game.minPlayers === 2).slice(0, 5);
    };
    export const getPlayersData = () => {
      return boardGameData.filter((game) => game.maxPlayers > 2).slice(0, 5);
    };
    export const getDifficultyData = () => {
      return boardGameData.filter(
        (game) => game.difficulty === "초보" || game.difficulty === "왕초보"
      ).slice(0, 5);
    };

5. 비슷한 게임 (getSimilarBoardGame)

  1. 해당 보드게임의 카테고리와 겹치는 보드게임을 boardGameData.json에서 불어오기 + 현재 게임 제외
     const data = boardGameData.filter(
         (game) =>
           game.id !== Number(id) && //현재 보드게임 제외
           game.boardGameCategories.some((category) => categories.includes(category))
       );

    some() : 배열 안에 조건을 만족하는 요소가 하나라도 존재하면 true를 반환으로
    boardGameData를 순회하며 동일한 카테고리를 포함하고 있어 true값을 반환하는 값들만 배열로 반환

  1. 보드게임이 여러 카테고리에 속해 있으면 많이 겹치는 순으로 정렬

    1 ) 겹치는 카테고리 수를 계산해서 보드게임 정보 객체에 새로운 속성으로 추가

    2 ) .sort()함수로 matchingCount를 기준으로 내림차순하여 출력

      export const getSimilarBoardGame = (categories, id) => {
        const filterData = boardGameData.filter(
          (game) =>
            game.id !== Number(id) &&
            game.boardGameCategories.some((category) => categories.includes(category))
        );
        const sortedData = filterData
          .map((game) => ({
            ...game,
            matchingCount: game.boardGameCategories.filter((category) =>
              categories.includes(category)).length,
          }))
          .sort((a, b) => b.matchingCount - a.matchingCount);
    
        return sortedData;
      };

0개의 댓글