서버 이슈로 인해 보드게임 관련 데이터를 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} | ✅ |
export const getSearchResult = (keyword) => {
const data = boardGameData.filter((item) => item.name.includes(keyword));
return data;
};export const getCategorySelect = (name) => {
return boardGameData.filter((game) =>
game.boardGameCategories.includes(name)
);
};```jsx
export const getBoardGameDetail = (id) => {
const data = boardGameData.find((item) => item.id === Number(id));
return data;
};
```✅ 고유한 값을 기준으로 객체를 하나씩 가져와야하기에
find()를 쓰는 것이 적합
⚠️filter()를 사용하면 배열에 감싸져 반환되기 때문에 인덱스를 지정해서 접근해야하며 배열이 비여있는 경우 undefined되어 에러 발생
각종 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);
};
boardGameData.json에서 불어오기 + 현재 게임 제외 const data = boardGameData.filter(
(game) =>
game.id !== Number(id) && //현재 보드게임 제외
game.boardGameCategories.some((category) => categories.includes(category))
);
some(): 배열 안에 조건을 만족하는 요소가 하나라도 존재하면 true를 반환으로
boardGameData를 순회하며 동일한 카테고리를 포함하고 있어 true값을 반환하는 값들만 배열로 반환
보드게임이 여러 카테고리에 속해 있으면 많이 겹치는 순으로 정렬
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;
};