-> 완료!
상점 id랑 가챠상품 id랑 이어져있어야 한다
matchId에서 승자, 패자, 승자점수, 패자점수, 승자슈팅횟수, 패자슈팅횟수, 승자수비횟수, 패자수비횟수
굳이 Account와 이어줄 필요가 있을까? 에 대한 것
상점
프로덕트의 DB에 저장을 할지
result는 여러개 생길 수 있고 gameId는 중복으로 넣을 수 있다?
가챠는 범위를 주고 그 안에서 랜덤으로 추출한다. 가 공통적이다.
범위만 주면 그 안에서 랜덤으로 뽑아주니까, 우리는 범위만 주면 된다.
배열 형태를 주되, 시작과 끝만 정해주면 된다. 그건 가챠테이블에 넣어줘도 되고, Players에서 참조해와도 되고, 그냥 로직으로 정해줘도 되고.
뽑기 횟수까지 DB에 넣을 필요는 없지 않을까? -> DB에 횟수가 있으면 로직 하나로 두개를 만들 수 있다.
N : M이면 아이디가 중복으로 들어갈 수 있다? 이 말을 이해해보자.
-> 여러 사람이 여러 배민 주문을 할 수 있다. 여러 게시글에 여러 댓글이 달릴 수 있다
서리하 - 치킨
서리하 - 피자
김개발 - 치킨
김개발 - 커피
게시글1 - 재밌어요
게시글1 - 도움됐어요 감사합니다
게시글2 - 이건 재미없어요
게시글2 - 저는 재밌는데 왜그러세요
동혁님의 조언: 그냥 필요한 것만 만들면 되는거다! 라는 생각을 하자. 단어에 너무 사로잡히지 말자. 필요한걸 저장할거면 테이블이 필요한거다.
1:1인 경우 - 닉네임 생각하면 된다. 유니크 키로 종속된다. 이 닉네임도 주인 나 하나, 나도 닉네임은 얘 하나.
1:N인 경우 - 나는 한명이지만 내 블로그 글은 여러개. 하지만 내 블로그 글은 여러 주인을 가질 수 없지!
N:M인 경우 - 여러 게시글에 여러 코멘트. 코멘트도 여러 주인을 가질 수 있고 게시글도 여러 코멘트를 가질 수 있다.
// 만세! 잘돌아간다. 이제 툴팁을 어떻게 끼워넣을까?
// 유정튜터님의 팁 - 아이템코드를 싹 모아서 게임db로 findMany를 하면 된다
router.get('/inventory/:characterId', authMiddleware, async (req, res, next) => {
const { characterId } = req.params;
const findCharacter = await userDataClient.characters.findUnique({
where : { characterId : +characterId },
})
if(!findCharacter)
return res.status(404).json({message : "올바른 캐릭터가 아닙니다"})
const findInventory = await userDataClient.inventory.findFirst({
where : { characterId : +findCharacter.characterId }
})
if(!findInventory)
return res.status(404).json({message : "인벤토리가 잘못 된 것 같습니다"})
const findInventoryItem = await userDataClient.inventoryItem.findMany({
where : { inventoryId : +findInventory.inventoryId }
})
// const findItemInfo = await gameDataClient.items.findMany({
// where : { itemCode : }
// })
return res.status(200).json({ inventoryItem : findInventoryItem })
})
- 유저DB에 있는 인벤토리 아이템을 findMany로 찾아서, map으로 itemCode만 싹 끌어온 배열을 생성.
-> (이것도 findInventoryItems[0].itemCode 하면 낱개로는 나오는데, 여러개로 불어올 방법을 몰라서 모던 자바스크립트 보면서 엄청 끙끙댔다)- 그 itemCode로 게임DB 조회구문의 where절에 걸어주는데, where절에 in을 걸어 해당 조건에 부합하는 애들을 다 가져와준다!
-> 유정 튜터님의 구원 덕에 아이템 구매 로직은 완성했는데, 여기에 아이템DB에 있는 툴팁을 끼워넣고 싶었다.
근데 나는 승현 튜터님의 해설영상을 보고 DB를 두개로 분리해버린 상태라, 두 DB가 만날 수가 없었는데...
이제 툴팁을 어떻게 끼워넣을까? 를 끙끙대며 고민하다 유정 튜터님께 질문을 드렸다.
const findInventoryItems = await userDataClient.inventoryItem.findMany({
where: { inventoryId: +findInventory.inventoryId },
select: {
inventoryItemId: true,
itemCode: true,
itemCount: true,
},
});
const itemCodes = findInventoryItems.map((item) => item.itemCode);
// 게임db에서 이름과 툴팁 찾기
const findItemInfo = await gameDataClient.items.findMany({
where: {
itemCode: {
in: itemCodes,
},
},
select: {
itemName: true,
tooltip: true,
},
});
따로따로 나오긴 하지만 어찌됐든 나온다.
처음엔 findMany에 where절 안 걸어줘도 나오길래 지금까지의 고생이 헛된 줄 알았다.
(findMany에는 where절 안걸어도 나오긴 나온다. 근데 원치 않게 모든 데이터가 다 나온다)
그러나 나는 인벤토리에 가진 아이템에 대한 이름과 툴팁만 보고 싶은거니까, 유정튜터님 말씀대로 itemCode를 기반으로 where절을 거는 게 맞다!
어떻게 일요일에도 12시간을 작업하고 공부할할수가 있어염 집에가염