팀이 배정되었고 설레는 마음으로 팀원들과 인사하며 프로젝트에 사용할 아이디어들을 이야기하였고 우리는 랜덤박스 라는걸 하기로 하였다.
저렇게 생긴 박스를 클릭하면 포인트가 빠져나가고 관리자가 상품을 등록한것들 중에 랜덤으로 내 페이지에 상품이 가게끔 하도록 만들기로 했다.
( 참고용 그림)
내가 맡은 역할은 박스를 누르면 랜덤으로 상품이 배정되어 마이페이지에 들어가게끔 하는게 내 역할이었다.
고민이 좀 되었다. 어떻게 API를 짤지...
기존에 사용했던 CRUD가 아니라 새로운 Math, floor 메소드를 사용해서 만들어야하다보니 고민이 많아져서 스트레를 좀 받았던거 같다.
왜냐면 여러가지 삽질을 해보는데 생각만큼 잘 되어가지는 않았다. 그래도 우선 전역에 선언할 랜덤 메소드는 만들었다.
const dom = function rand(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
console.log(dom(1, 100));
이런식으로 만들어주면 1~100에 숫자중에 랜덤으로 찍히는걸 알 수 있다. 솔직히 여기까지는 금방해서 기분이 굉장히 좋았다구!
근데 여기부터가 어려웠던게 아직 초반이어서 상품을 만드는 페이지도 없었고 이거를 랜덤으로 생성해서 어떻게 마이페이지에 보이게 할건지 정말 고민이 많이 되었었다.
그러면서 대망의 월요일...
갑자기 세상이 돌기 시작했고 너무 어지럽기 시작했다. 너무 어지러워서 병원을 갔더니 이석증이라니... ㅠㅠ 월요일은 뭔가 제대로 하지못하고 쓰러져서 골골거렸다고한다...
그리고 화요일부터 열심히 만들기 시작해서 만들어냈다.
controller//
createRandoms = async (req, res, next) => {
try {
const {userId} = res.locals.user;
const createMypagesData = await this.mypagesService.createRandoms(userId);
res.status(201).json({data: createMypagesData});
} catch (err) {
if (err.code === -2) {
res.status(401).json({errorMessage: '포인트가 모자라다'});
} else {
res.status(400).json({errorMessage: '요청한 데이터 형식이 올바르지 않습니다.'});
}
}
service//
const putPointMypages = await this.mypagesRepository.putPointMypages(userId);
//전체 상품 갯수를 세서 랜덤으로 숫자 뽑기
const goodsLength = await this.mypagesRepository.findAllGoods();
const randomNum = dom(1, 100);
const goodsId = (randomNum % goodsLength) + 1;
// 뽑힌 숫자 상품을 박스에 넣어주기
const createItem = await this.mypagesRepository.createRandoms(userId, goodsId);
return createItem;
repository//
createRandoms = async (userId, goodsId) => {
const createGoods = await Boxes.create({ userId, goodsId });
console.log(createGoods);
return createGoods;
};
이렇게 만들어서 Boxes 모델에서 userId와 goodsId(상품) 을 받게끔 만들어 주었다.