부트캠프

71일차 TIL

ohs020105 2025. 2. 14. 20:44

오늘은 면접카타 노션이 안들어가지는 이슈때문에 오늘 작업한내용을 바탕으로 til을 적도록 하겠다.

 

오늘 하루종일 만졌던 코드는 아이템파일쪽 코드인데 이제 어떤기능을 하느냐

 

상점에서 아이템을 구입하고 판매하는 로직을 만들었다. 

 

처음에는 되게 별거 없겠지 생각으로 만들었는데

 

가장 중요한 기능을 잊고 진행을 했었다...

 

바로 한정 수량이 max가 되어도 계속해서 구매가 가능하게 만들어지는 것이다. 

 

코드는 

async purchaseItem(/*userInfo: UserInfo,*/ createItemDto: CreateItemDto): Promise<Item> {
    const { storeItemId, inventoryId, count } = createItemDto;

    // StoreItem 테이블에서 아이템 확인
    const storeItem = await this.storeItemRepository.storeItemFindOne(storeItemId);
    if (!storeItem) {
        throw new NotFoundException('상점에 존재하지 않는 아이템입니다.');
    }

    // Inventory 테이블에서 인벤토리 확인
    const inventory = await this.inventoryRepository.findOneByInventoryId(inventoryId);
    if (!inventory) {
        throw new NotFoundException('존재하지 않는 인벤토리입니다.');
    }

    // 기존 아이템 확인
    const item = await this.itemRepository.findOneByInventoryIdAndStoreItemId(inventoryId, storeItemId);
    if (item) {
        // 수량 증가 시 최대 수량 확인
        if (item.count + count >= 100) {
            throw new NotFoundException('아이템 수량은 최대 99개까지만 구매할 수 있습니다.');
        }
        item.count += count;
        await this.itemRepository.updateItem(item.id, { count: item.count });
        return item;
    } else {
        // 새로운 아이템 생성 시 최대 수량 확인
        if (count >= 100) {
            throw new NotFoundException('아이템 수량은 최대 99개까지만 구매할 수 있습니다.');
        }
        return await this.itemRepository.buyItem(createItemDto);
    }
  }

이런식으로 진행이 되어있다. 

 

최근에 레파지토리 파일도 만들어야 된다는 얘기를 듣고 바로 호다닥 만들고 그동안 typeorm을 이용해서 entity 파일에서 바로 가져오던걸 repository파일로 나눠서 좀 더 명확하고 보기 편하게 작성이 되었다.

 

지금 보는 파일은 서비스 파일인데 여기서 로직이 많이 있다. 

 

우선 처음에 아이템 파일이지만 상점의 아이템을 구매해야 되기 때문에 아이템 데이터베이스를 이용하는게 아닌 스토어 아이템 데이터베이스를 이용한다. 거기서 findone을 사용해 물품을 찾는다. 

 

만약 자신이 찾는 물품이 상점에 없다면 물품이 없다는 오류를 뱉어낸다. 

 

그렇게 아이템을 찾으면 구매를 할 수 있고 그 물품은 아이템 데이터베이스로 들어가게 된다. 

 

그렇게 들어간 데이터베이스를 찾아볼수 있게 된는건 인벤토리에 있는 로직으로 이용해 찾아볼수 있다.

이렇게 로직은 됙 별거 없지만 찾아보는 레파지토리를 아이템으로 하면 그 아이템레파지토리에서 확인을 할 수 있게 된다.

이렇게 정상적으로 들어와 있는걸 확인 할 수 있다.

 

이제 앞으로 할 일은 상점로직에는 role을 추가해 운영자만 아이템을 추가하고 삭제하고 수정할 수 있게 만들 것 이고,

구매할때랑 판매할때 실제로 유저랑 연동되어서 그 유저의 재화를 사용해 구입 / 판매 가능하게 만들 예정이다. 

 

이제 앞으로 유저 인증기능을 마친다음 바로 웹소켓 단계로 넘어가서 진행할 예정이다. 

아직 앞으로 할 일이 많다..ㅎㅎ 

 

오늘 하루도 고생했고 다음주에도 고생하자!