Skip to content

jaelyangChoi/tableTennisGame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

탁구 게임 서비스


서비스 설명

  • 탁구 게임의 종류는 2가지가 존재
    • 단식(SINGLE) : 1대1로 게임을 진행
    • 복식(DOUBLE) : 2대2로 게임을 진행
  • 유저들은 방을 생성하거나 만들어진 방에 참가해 게임을 진행
  • 방에 참가한 유저들은 RED, BLUE 팀 중 한 개의 팀에 배정
  • 팀은 변경이 가능

주요 기능 (API)

  1. 헬스 체크 (서버의 상태를 체크)
  2. 초기화 (필요한 유저 domain에 대한 초기화)
  3. 유저 전체 조회
  4. 방 생성
  5. 방 전체 조회
  6. 방 상세 조회
  7. 방 참가
  8. 방 나가기
  9. 게임시작
  10. 팀 변경

API 문서 (Swagger)

애플리케이션 실행 후 localhost:8080/swagger-ui.html 접속


요구 사항

1. 헬스 체크 API

  • 모든 시나리오에 대해 최초 1회 호출

2. 초기화 API

  • seed와 quantity를 body에 담아서 요청하면
  • 기존에 있던 모든 회원 정보 및 방 정보를 삭제 (즉, 모든 table의 모든 데이터를 삭제)
  • 이후 body로 전달받은 seed와 quantity정보를 통해 아래 fakerapi를 호출하여 서비스에 필요한 회원 정보를 저장
    • https://fakerapi.it/api/v1/users?_seed={seed}&_quantity={quantity}&_locale=ko_KR
  • fakerapi의 응답 결과로 내려오는 데이터를 아래 규칙에 따라 세팅
    • 응답 값의 id 필드는 fakerId로 저장(오름차순으로 정렬하여)
    • username 필드는 name으로 저장
    • email 필드는 그대로 저장
    • uuid, firstname, lastname, password, ip, macAddress, website, image 필드는 사용하지 않음
    • 회원 상태(status)는 응답 값의 id(fakerId)를 기반하여 아래 규칙에 따라 저장
      • 응답 값의 id(fakerId) 값이 30 이하의 회원은 활성(ACTIVE) 상태로 세팅
      • 응답 값의 id(fakerId) 값이 31 이상, 60 이하의 회원은 대기(WAIT) 상태로 세팅
      • 응답 값의 id(fakerId) 값이 61 이상인 회원은 비활성(NON_ACTIVE) 상태로 세팅
    • 데이터가 저장되는 시점에 따라 createdAt과 updatedAt을 저장

3. 유저 전체 조회 API

  • 페이징 처리를 위한 size, page 값을 RequestParameter로 받음
  • 모든 회원 정보를 응답(id 기준 오름차순으로 정렬해서 반환)

4. 방 생성 API

  • 방을 생성한 사람을 host라고 명칭하고, host가 방을 나가면 해당 방은 사라짐
  • userId, roomType, title 정보는 body에 담아서 요청
  • 방을 생성하려고 하는 user(userId)의 상태가 활성(ACTIVE)상태일 때만, 방을 생성할 수 있음. 만약 활성상태가 아닐때는 201 응답을 반환
  • 방을 생성하려고 하는 user(userId)가 현재 참여한 방이 있다면, 방을 생성할 수 없음. 만약 참여하고 있는 방이 있을때는 201 응답을 반환
  • 방은 초기에 대기(WAIT) 상태로 생성
  • 데이터가 저장되는 시점에 따라 createdAt과 updatedAt을 저장

5. 방 전체 조회 API

  • 페이징 처리를 위한 size, page 값을 RequestParameter로 받음
  • 모든 방에 대한 데이터를 반환(id 기준 오름차순으로)

6. 방 상세 조회 API

  • roomId를 받아 방에 대한 상세 조회
  • createdAt, updatedAt을 함께 반환
  • 존재하지 않는 id에 대한 요청이라면 201 응답을 반환

7. 방 참가 API

  • 대기(WAIT) 상태인 방에만 참가 가능. 만약 대기 상태가 아닌 방이라면 201 응답을 반환
  • 유저(userId)가 활성(ACTIVE) 상태일 때만, 방에 참가 가능. 만약 활성상태가 아니라면 201 응답을 반환
  • 유저(userId)가 현재 참여한 방이 없을때만, 방에 참가 가능. 만약 참여한 방이 있다면 201 응답을 반환
  • 참가하고자 하는 방(roomId)의 정원이 미달일 때만, 참가 가능. 만약 방에 인원이 가득 찼다면 201 응답을 반환
  • 존재하지 않는 id에 대한 요청이라면 201 응답을 반환
  • 팀 배정
    • 한 쪽 팀에 인원이 모두 찬 경우, 반대팀으로 배정
    • 양쪽 팀에 모두 자리가 있는 경우, RED팀에 먼저 배정

8. 방 나가기 API

  • 유저(userId)가 현재 해당 방(roomId)에 참가한 상태일 때만, 나가기 가능. 만약 참가한 상태가 아니라면 201 응답을 반환
  • 이미 시작(PROGRESS) 상태인 방이거나 끝난(FINISH) 상태의 방은 나갈 수 없음. 만약 그러한 상태라면 201 응답을 반환
  • 호스트가 방을 나가게 되면 방에 있던 모든 사람도 해당 방에서 나가게 됨. 해당 방은 끝난(FINISH) 상태가 됨
  • 존재하지 않는 id에 대한 요청이라면 201 응답을 반환

9. 게임시작 API

  • 호스트인 유저만 게임을 시작 가능. 만약 호스트가 아니라면 201 응답을 반환
  • 방 정원이 방의 타입에 맞게 모두 꽉 찬 상태에서만 게임을 시작 가능. 만약 그렇지 않다면 201 응답을 반환
    • 단식 2명, 복식 4명
    • RED, BLUE 2개의 팀이 존재하고 서로 반/반 정확하게 인원이 나뉘어진 상태에서만 게임을 진행할 수 있음
  • 현재 방의 상태가 대기(WAIT) 상태일 때만 시작 가능. 만약 그렇지 않다면 201 응답을 반환
  • 방의 상태를 진행중(PROGRESS) 상태로 변경
  • 게임시작이 된 방은 1분 뒤 종료(FINISH) 상태로 변경
  • 존재하지 않는 id에 대한 요청이라면 201 응답을 반환

10. 팀 변경 API

  • 유저(userId)가 현재 해당 방(roomId)에 참가한 상태에서만 팀 변경 가능. 만약 그렇지 않다면 201 응답을 반환
  • 유저(userId)가 현재 속한 팀 기준 반대 팀으로 변경 (RED -> BLUE / BLUE -> RED)
  • 변경되려는 팀의 인원이 이미 해당 방 정원의 절반과 같다면 팀이 변경되지 않고 201 응답을 반환
  • 현재 방의 상태가 대기(WAIT) 상태일 때만 팀을 변경 가능. 만약 그렇지 않다면 201 응답을 반환
  • 존재하지 않는 id에 대한 요청이라면 201 응답을 반환

About

탁구 게임 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages