- 탁구 게임의 종류는 2가지가 존재
- 단식(SINGLE) : 1대1로 게임을 진행
- 복식(DOUBLE) : 2대2로 게임을 진행
- 유저들은 방을 생성하거나 만들어진 방에 참가해 게임을 진행
- 방에 참가한 유저들은 RED, BLUE 팀 중 한 개의 팀에 배정
- 팀은 변경이 가능
- 헬스 체크 (서버의 상태를 체크)
- 초기화 (필요한 유저 domain에 대한 초기화)
- 유저 전체 조회
- 방 생성
- 방 전체 조회
- 방 상세 조회
- 방 참가
- 방 나가기
- 게임시작
- 팀 변경
애플리케이션 실행 후 localhost:8080/swagger-ui.html 접속
- 모든 시나리오에 대해 최초 1회 호출
- 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을 저장
- 페이징 처리를 위한 size, page 값을 RequestParameter로 받음
- 모든 회원 정보를 응답(id 기준 오름차순으로 정렬해서 반환)
- 방을 생성한 사람을
host라고 명칭하고,host가 방을 나가면 해당 방은 사라짐 - userId, roomType, title 정보는 body에 담아서 요청
- 방을 생성하려고 하는 user(userId)의 상태가 활성(ACTIVE)상태일 때만, 방을 생성할 수 있음. 만약 활성상태가 아닐때는 201 응답을 반환
- 방을 생성하려고 하는 user(userId)가 현재 참여한 방이 있다면, 방을 생성할 수 없음. 만약 참여하고 있는 방이 있을때는 201 응답을 반환
- 방은 초기에 대기(WAIT) 상태로 생성
- 데이터가 저장되는 시점에 따라 createdAt과 updatedAt을 저장
- 페이징 처리를 위한 size, page 값을 RequestParameter로 받음
- 모든 방에 대한 데이터를 반환(id 기준 오름차순으로)
- roomId를 받아 방에 대한 상세 조회
- createdAt, updatedAt을 함께 반환
- 존재하지 않는 id에 대한 요청이라면 201 응답을 반환
- 대기(WAIT) 상태인 방에만 참가 가능. 만약 대기 상태가 아닌 방이라면 201 응답을 반환
- 유저(userId)가 활성(ACTIVE) 상태일 때만, 방에 참가 가능. 만약 활성상태가 아니라면 201 응답을 반환
- 유저(userId)가 현재 참여한 방이 없을때만, 방에 참가 가능. 만약 참여한 방이 있다면 201 응답을 반환
- 참가하고자 하는 방(roomId)의 정원이 미달일 때만, 참가 가능. 만약 방에 인원이 가득 찼다면 201 응답을 반환
- 존재하지 않는 id에 대한 요청이라면 201 응답을 반환
- 팀 배정
- 한 쪽 팀에 인원이 모두 찬 경우, 반대팀으로 배정
- 양쪽 팀에 모두 자리가 있는 경우, RED팀에 먼저 배정
- 유저(userId)가 현재 해당 방(roomId)에 참가한 상태일 때만, 나가기 가능. 만약 참가한 상태가 아니라면 201 응답을 반환
- 이미 시작(PROGRESS) 상태인 방이거나 끝난(FINISH) 상태의 방은 나갈 수 없음. 만약 그러한 상태라면 201 응답을 반환
- 호스트가 방을 나가게 되면 방에 있던 모든 사람도 해당 방에서 나가게 됨. 해당 방은 끝난(FINISH) 상태가 됨
- 존재하지 않는 id에 대한 요청이라면 201 응답을 반환
- 호스트인 유저만 게임을 시작 가능. 만약 호스트가 아니라면 201 응답을 반환
- 방 정원이 방의 타입에 맞게 모두 꽉 찬 상태에서만 게임을 시작 가능. 만약 그렇지 않다면 201 응답을 반환
- 단식 2명, 복식 4명
- RED, BLUE 2개의 팀이 존재하고 서로 반/반 정확하게 인원이 나뉘어진 상태에서만 게임을 진행할 수 있음
- 현재 방의 상태가 대기(WAIT) 상태일 때만 시작 가능. 만약 그렇지 않다면 201 응답을 반환
- 방의 상태를 진행중(PROGRESS) 상태로 변경
- 게임시작이 된 방은 1분 뒤 종료(FINISH) 상태로 변경
- 존재하지 않는 id에 대한 요청이라면 201 응답을 반환
- 유저(userId)가 현재 해당 방(roomId)에 참가한 상태에서만 팀 변경 가능. 만약 그렇지 않다면 201 응답을 반환
- 유저(userId)가 현재 속한 팀 기준 반대 팀으로 변경 (RED -> BLUE / BLUE -> RED)
- 변경되려는 팀의 인원이 이미 해당 방 정원의 절반과 같다면 팀이 변경되지 않고 201 응답을 반환
- 현재 방의 상태가 대기(WAIT) 상태일 때만 팀을 변경 가능. 만약 그렇지 않다면 201 응답을 반환
- 존재하지 않는 id에 대한 요청이라면 201 응답을 반환