-> roster 테이블에 꽂아줘야 하는데 roster에는 playerName이 없기 때문에 playerId로 꽂아줘야 한다
(이거 웅상님 코드 참고할것)
그래서 새로고침 하면 사라지지만, 다른 API를 누르면 또 쿠키에 있는 리프레시 토큰을 기준으로 새로 발급해준다.
참고 블로그에 다음과 같이 써 있었다.
- include 옵션은 쿼리 응답에 join되는 테이블의 일부 필드를 포함해줄 수 있게 함
- select를 중첩해서 relation field의 특정 값을 가져올 수 있게 함
- 가령 include문을 사용해 특정한 field를 join할 수 있음
상점과 가챠는 따로 있는 것이 좋겠다!
큰 로직은 다음과 같을 것이다
이 유저의 소유물로 뭔가가 추가된다는 로직을 호출하면 위와 같다. 가챠를 했을때는 3단계가 될것.
돈이 빠져나간다 - 랜덤으로 아이디 고른다 - 그 아이디에 해당하는걸 가방에 넣어준다
어지간하면 트랜잭션 안에 돈빼고 구매이력 만들고 선수가 들어가는 것 까지가 한 트랜잭션이어야 하지 않을까?
가챠를 돌린다면 어떤 정해진 풀이 있어야 하지 않을까? 티어라던지...
-> MySQL 쿼리중에 랜덤 추출이 된다! 충격적
앞에 동사가 붙으면 코드 컨벤션 상 함수인 경우가 많다. 변수에 이런 작명은 지양하자
모델명은 상관없지만 테이블명은 복수인 것이 좋다 (players, accounts, gachas...)
지금은 일단 돌아가기만 하면 그만인게 맞긴 하고,
그런데 지금 가챠로직은 비효율적인게 맞긴 맞다
지금 가장 문제는 가챠로직과 구매로직이 따로 돌아간다는 것.
얘까지 트랜잭션 안에 들어가면 좋을듯?
작은 함수들을 만들고 그들을 조립해주면 훨씬 나을것이다
가챠 아닌건 돈을 빼고 상품을 넣어주면 되고,
가챠가 맞는건 돈을 빼고 랜덤을 돌리고 상품을 넣어주면 되잖는가?
인게임 내부 로그는 Log, 인게임 내 콘텐츠 스트링은 String 이라는 식으로 테이블을 분리해서 관리해보는 것은 어떨까? 현업에서 그런 관리방식을 보셨다고.
-> 창민 튜터님 말씀대로 캐시의 증감만 기록하고 그 합계를 계정의 보유캐시로 꽂아주는 방법이 좋긴 좋다.
그런데 이 경우 캐릭터 생성 시 지급되는 캐시가 있다면 그것에 대해서도 로그가 남아야 함.
JS 게임 클라이언트 라이브러리가 꽤 된다 - 픽시JS 라는 것이 있다
three.js 라는 것도 있다
https://developer.mozilla.org/ko/docs/Web/API/Window/requestAnimationFrame
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineTo
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/stroke
import { prisma } from '../prisma/index.js';
export default async function (accountId, gachaQuantity) {
const randomPickOne = await prisma.$queryRaw`Select * From player Order by rand() Limit 1`;
const pickedPlayer = [];
console.log('randomPickOne =>', randomPickOne)
for (let i = 0; i < gachaQuantity; i++) {
pickedPlayer.push({
playerId: +randomPickOne[0].playerId,
accountId: +accountId,
});
console.log('pickedPlayer: ', pickedPlayer);
}
return pickedPlayer;
}
나와 동혁님 사이 사다리들에 대체 무슨 일이 있었던걸까... 아무튼 발표자는 동혁님이 당첨되셨다. 짤없이 나인줄 알았는데😇