2025년 3월 10일

김동환·2025년 3월 10일

TIL (Today I Learned) - 2025.03.10

1. GameResultsSubscriber에서 승리/패배한 유저의 점수 및 돈 업데이트

  • gameResults 채널을 구독하여 게임 결과를 수신한 후, 승리한 유저와 패배한 유저를 구분하여 점수(score)와 돈(money)을 업데이트.
  • 승리한 유저: money +1000, score +100
  • 패배한 유저: score -100 (돈은 변동 없음)
  • updateUserStats 함수를 활용하여 QueryBuilder로 한 번의 SQL 쿼리로 여러 유저의 데이터를 업데이트하도록 최적화.

2. GameResultsSubscriber에서 시민 팀(비마피아) 승리 시 보상 대상 명확화

  • 기존 코드에서는 마피아가 이기면 마피아만 보상을 받고, 마피아가 지면 마피아를 제외한 모든 플레이어가 보상을 받는 구조.
  • 이를 개선하여 시민 팀(의사, 경찰, 일반 시민)만 보상을 받을 수 있도록 로직을 수정.
  • winningPlayers 필터를 개선하여 승리 팀이 mafia면 마피아만 보상을 받고, citizens면 시민, 의사, 경찰만 보상을 받도록 변경.

3. GameResultsModule에서 UsersRepository를 사용하기 위한 설정 추가

  • GameResultsSubscriber에서 @InjectRepository(User)를 사용할 수 있도록 GameResultsModuleUsersModuleimports에 추가.
  • TypeOrmModule.forFeature([User])을 포함하여 UsersRepository를 사용할 수 있도록 수정.

4. 기존 코드 유지하면서 기능 확장

  • 기존 endGameGameResultsSubscriber의 핵심 기능은 유지하면서 중복 실행 방지, 보상 로직, 유저 테이블 연동 등의 기능을 확장.
  • updateUserStats를 활용하여 여러 유저의 데이터를 동시에 업데이트하여 성능을 개선.
  • Redis Pub/Sub을 활용한 비동기 처리 로직을 유지하면서 안정성을 강화.
profile
Node.js 7기

0개의 댓글