/03-GameDuo-wanted-D

원티드 프리온보딩 백엔드코스 D팀 - 3주차 기업과제 게임듀오 (게임레이드 진행, 종료, 랭킹조회 등 API개발)

Primary LanguageTypeScript

게임듀오

프로젝트 진행 기간

2022.07.11 ~ 2022.07.15

사용 기술

  • Typescript, NestJS, TypeORM
  • Github, Redis 7.0.2, MySQL 8.0.28
  • Redis, MySQL 사전 설치 필요

팀원별 역할

  • 프로젝트 세팅 및 배포
    • 담당: 김태용
    • Nest JS 프로젝트 세팅, DevOps
  • User 생성 및 조회
    • 담당: 고현석
  • Boss - Raid
    • 보스 레이드 시작 담당: 장주엽
    • 보스 레이드 조회, 종료 담당: 김명일
  • Redis를 활용한 랭킹조회
    • 담당: 최아름

RUN

  • 배포 링크: 미정
$ npm i
$ npm run start

환경변수 설정

# mysql
DB_HOST=
DB_USERNAME=
DB_PASSWORD=
DB_DATABASE=

서비스 개요

  • 유저를 생성하고 조회해서 유저의 게임 기록을 확인할 수 있다.
  • 보스레이드 상태를 조회하고 시작, 종료를 할 수 있다.
  • 보스레이드 합계점수를 합산해 랭킹을 조회할 수 있다.

REST API Docs

https://shininggiver.gitbook.io/gameduo/reference/api-reference

요구사항 분석

  1. 유저 생성

    • 유저는 이메일, 비밀번호, 닉네임 속성을 가진다.
    • 비밀번호는 문자, 숫자, 특수문자를 최소 하나씩 가지며 8 - 16 문자열이다.
    • 닉네임은 2 - 10 자리 문자열이다.
  2. 유저 조회

    • 유저는 자신의 정보를 조회할 수 있다.
    • 유저 조회시 자신의 레이드 기록과 레이드 기록에 대한 총 점수를 조회할 수 있다.
  3. 보스레이드 상태 조회

    • 현재 진행중인 유저가 있다면 입장할 수 없다는 응답을 보내야한다.
    • 현재 진행중인 유저가 없다면 입장할 수 있다는 응답을 보내야한다.
    • 이때 입장 가능 조건은 아래와 같다.

    ** 입장 가능 조건

    • 아무도 보스레이드를 시작한 기록이 없는 경우
    • 시작한 사람이 보스레이드를 종료한 경우
    • 시작한 사람이 제한 시간에 의해 보스레이드가 종료된 경우
  4. 보스레이드 시작

    • 한 번에 한 명의 유저만 보스레이드를 시작할 수 있다.
    • 레벨에 상관 없이 한 유저가 보스레이드를 진행중이라면 다른 유저는 보스레이드를 시작할 수 없다.
    • 동시에 시작 요청이 오면 한 유저만 보스레이드를 시작할 수 있기때문에 동시성 처리가 필요하다.
  5. 보스레이드 종료

    • 종료는 FAIL, SUCCESS 두 가지 타입을 가진다.
    • 보스레이드를 시작한 사람만이 보스레이드를 종료할 수 있다.
    • 제한 시간 이내에 종료 요청을 하게되면 보스레이드는 SUCCESS 타입이 된다.
      • 그렇지 않다면 보스레이드는 FAIL 타입으로 처리된다.
    • 보스레이드를 시작한 시간으로부터 제한 시간이 지나면 에러 처리를 한다.
    • 보스레이드가 제한 시간 이내에 종료되면 각 레벨에 따라 점수를 부여한다.
  6. 보스레이드 랭킹조회

    • 전체 랭킹과 유저 본인 랭킹을 조회할 수 있다.
    • 랭킹은 보스레이드 총점수 기준 내림차순으로 관리된다.

ERD

스크린샷 2022-07-15 오후 2 09 33