-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Team 20] DB 설계 #6
base: team-20
Are you sure you want to change the base?
[Team 20] DB 설계 #6
Conversation
- 스프링 부트 기본 프로젝트 셋업 - java 8 / jdk 1.8 - gradle - 의존성 : spring web, mysql, spring data jdbc
- 임시로 local 서버의 mysql을 데이터 소스로 설정 - 이후 배포 서버의 mysql과 연동할 예정
- 설계한 DB 모델 문서를 /resources/static 아래 위치 - baseball_model_1.mwb (workbench 모델 파일) - baseball_model_1.png (모델 캡쳐 사진 파일)
- 설계한 DB 모델 문서를 /resources/static 아래 위치 - baseball_model.mwb 수정 (workbench 모델 파일) - baseball_model.png 업로드 (모델 캡쳐 사진 파일)
- macOS에 의존적인 ../.DS_Store 경로는 버전 관리를 하지 않음
@jihye-woo 코드 레벨에선 리뷰드릴 부분이 없군요. 테이블만 보도록 하겠습니다. Game 테이블심플하게 게임 ID, 홈/원정 팀 정보 담고 있군요. 좋아 보입니다. 👍 Play, Player_Score 테이블야구의 기본 원칙에서 출발해보면 어떨까 싶은데요, 투수가 공을 던지기 전 까지 그 어떠한 일도 일어나지 않습니다. 위 사진을 참고해볼까요. 컬러 화면 오른편의 작은 정수 영역들을 봐 주세요. 결국 투수가 던진 공은 네 개 중 하나의 결과를 갖습니다. S, B, O, H.. Play_history 테이블공 하나하나에 대해 누가 던져서(투수) 누가 쳤고(타자), 어떤 결과가 (S, B, O, H 중 하나) 일어났는지가 기록되면 Play_history 자체는 기록이 될 필요가 없을 겁니다. 누상에 누가 출루됐는지를 관리하는 피쳐에 대해 생각해보죠. 생각해보면 야구 경기는 매 이닝이 끝날 때마다 루 상의 주자는 다 집에 가거나 죽습니다. 그렇다면 이 피쳐는 그렇다면이렇게 구성해보면 어떨까 싶습니다.
의 기본 구조를 갖고, Pitch가 가질 결과에 따라 다음 액션이 정의되는 방식으로 테이블 설계를 해 보면 어떨까요? |
GameViewModel & GameListViewModel 작성 및 Network 추가
response에 사용될 공통 형식인 ApiResult 클래스 생성
…ublic 1. acquireAttackTeam, acuqireDefenseTeam, acqurireCurrentInning() 메소드의 접근제어자를 public으로 변경 2. team id와 등번호로 BattingHistory를 반환해주는 메소드 추가
게임 메인화면을 업데이트하기 위한 리스폰스 DTO입니다.
1. 야구 게임방의 서비스 레이어입니다. 2. 게임 만들기, 게임 참가하기, 게임진행하기, 게임결과받기 의 기본기능이 있습니다.
인증과정과 Request param을 받는 걸 생략한 game관련 contoroller입니다. (추후 추가 예정)
변경된 테이블에 맞게 PitchHistory에 strikeCount, ballCount 추가
pitchHistory 기록할 때, 당시의 투구상황을 기록하도록 수정했습니다.
PitchHistoryDTO에 투구 당시의 스트라이크, 볼 카운트와 투수, 타자 정보 등을 추가로 담도록 수정
안타를 친상황에서 PitchHistory를 BALL로 기록하고 있었습니다.
1. Team 객체에서 uniform_number를 key로, Player를 value로 하는 Map을 들고 있습니다. 2. Player는 aggregate root인 Team을 통해서만 접근할 수 있기 때문에, Player 내부에 uniform_number는 필요 없습니다. 3. Player가 uniform_number를 갖고 있으면, spring data jdbc가 쿼리문을 생성할때 uniform_number 칼럼을 중복하여 호출합니다.
게임방 목록을 보여주기 위하여 각 테이블을 조인하는 커스텀 쿼리 작성
…ivate 정적 팩토리 메소드 패턴을 위해서 builder의 접근제어자를 private으로 변경
1. sendBatterOnPlate 메소드로 타석에 타자를 올리면 타자의 타석 수도 올려줍니다. 2. 게임 첫시작이나 다음이닝 변경 시, sendBatterOnPlate 없이 this.batterUniformNumber만 바꿔주고 있어서 타석 수가 올라가지 않고 있었습니다.
현재 게임 기록 (스코어, 타율) 을 반환해주는 API 구현
1. 현재 만든 API 요청을 json body로 읽기위한 request DTO 생성했습니다. 2. GameController에서 json body를 읽도록 수정
- 라우트 적용 - 게임 컴포넌트 > 게임 헤더 부분 뷰 작업 완료 - 공통 적용할 수 있는 퍼블리싱 스펙을 theme.js에 정리 - 공통 적용할 수 있는 스타일 컴포넌트를 CommonStyles.jsx에 정리
- PopupButton animation - Fix PopupButton Hover - Add Attack team tag - Add Player tag - Fix background z-index
* chore: 프로젝트 초기화 설정 * add: cra | close min27604/baseball/#1 * feat: 시작 화면, 게임 화면 라우팅 처리 - min27604/baseball/#6 * add: 첫 화면에 필요한 컴포넌트 생성 - min27604/baseball/#2 - 게임 리스트 렌더링 하는 데에 에러 있음 * feat: 게임첫화면 mockData임시설정 min27604/baseball/#2 * style: 게임 진행화면 (수비) UI 구성중 - Component 4곳 구성 - Score, CurrentPlayer, Stadium, LogList Cmponent 생성 - Score, CurrentPlayer 구조완성 - min27604/basball/#11 * feat: Stadium 야구장 사진 입력 - img -> backgroundimg로 변경 - min27604/baseball/#11 * feat: Stadium UI 구성 및 rLogList 구조 설계 - Stadium component 내부 구조 설계 및 CSS 작업 - LogList component 폴더 구조 후 상세 작업 진행중 - min27604/baseball/#11 * feat: 시작 화면에 게임 목록 표시 - min27604/baseball/#45 * style: 게임 목록 스타일 수정 - min27604/baseball/#10 - 게임 목록에 3개씩 보이도록 수정 - 기타 자잘한 border-radius, font-size 등 수정 * style: 게임 목록 텍스트 정렬 수정 - min27604/baseball/#10 - vs가 가운데에 고정되도록 홈팀은 오른쪽 정렬 시킴 * feat: 팀 선점 여부에 따라 메시지 다르게 렌더링 (진행중) - min27604/baseball/#10 - 게임 목록에 경기 번호 추가 (MatchNumber 스타일드 컴포넌트)) - useContext를 사용해보는 중 * refactor: Team 컴포넌트 분리 - min27604/baseball/#10 - Styled component였던 Team 컴포넌트를 일반 컴포넌트로 분리 * feat: 팀 선점 여부에 따라 메시지 다르게 렌더링 (구조 바꿀 예정) - min27604/baseball/#10 - 서버와 통신하는 방법을 변경하기로 해서 현재까지 진행한 것 일단 타미와 합치기 위해 푸시 * fix: theme 적용 오류 해결 * feature: LogList UI 생성 - min27604/baseball/#11 * feat: Stadium에 ContextAPI 적용한 PlayBoard data 적용 - min27604/baseball/#15 * feat: Stadium S,B,O점수판 PITCH 이벤트 작성 - min27604/baseball/#15 * context 상태 정의를 App.jsx 안으로 수정, 로컬에서 mock data로 통신, axios 설치 (#16) * refactor: startScreen 디렉토리 생성 - min27604/baseball/#10 * fix: 디렉토리 생성에 따른 경로 수정 - min27604/baseball/#10 * refactor: context.jsx 파일 분리 및 App단으로 변경 - min27604/baseball/#10 * add: localhost로 fetch 보내는 로직 추가, context를 일단 다시 App으로 넣음 - min27604/baseball/#10 - context를 App에 다시 넣은 이유는, setState 로직이 필요한데 useState를 컴포넌트 안에서만 사용할 수 있어서이다. 나중에 costom hook으로 만들 수 있겠다는 조언을 들었다. - public directory 아래에 json 파일을 만들어 목데이터를 받아왔다. * refactor: boardHistory 시 코드 개선 - Stadium의 PlayPitch 수정 - Stadium의 PlayBoardTemp 수정 - min27604/baseball/#15 * fix: command not found 오류 해결 중 * feat: reducer 폴더 생성 및 ballReducer 분리 - min27604/baseball/#15 * feat: 유저의 팀이 홈팀인지 여부에 따라 Score 부분에 Player 렌더링 - min27604/baseball/#15 - API 구조 변경에 따라 수정 필요 * feat: Stadium PITCH 이벤트 추가 기능 - Strike==3 or Ball==4 일 때 아웃과 안타 동작 - min27604/baseball/#15 * chore: API 변경에 따른 수정 * refactor: PlayPitch 사용 오류 해결 - PITCH 클릭시 LogList - LogLine 렌더링 - Stadium: 변환시킨 ballCnt를 조건문으로 사용하기 위해선 useEffect를 사용해야 함 - min27604/baseball/#15 * feat: LogList CSS 일부 수정 - min27604/baseball/#15 * feat: inning board 뷰 업데이트 기능 만드는 중 * chore: 포트 번호 수정 * refactor: LComponent명 및 폴더명 변경 - LogPitcher -> LogHitter - ContextB -> Context - min27604/baseball/#15 * feat: PlayScreen- H(안타)확률&LogList 멘트 추가 - min27604/baseball/#15 * fix: API 요청 주소 변경 * chore: console.log 삭제 * feat: PlayScreen- H(안타) 확률 추가 , LogList 일부 수정 - min27604/baseball/#15 * feat: 게임 화면의 양 팀 이름을 서버에서 받아온 데이터를 이용해 표시 - min27604/baseball/#15 - DD가 올려준 글에서 나타난 문제 (같은 함수 안에서는 setState가 바로 반영이 안되는 것) 때문에 상태 세팅하는 작업을 PlayScreen으로 옮김 * feat: 현재 투수 이름 표시 (아직 공수교대 시 바뀌는 것까지는 안 된 상태) - min27604/baseball/#15 * feat: PlayScreen/LogList 에서 안타/아웃 시 현재 타자의 hit,out증가시키기 - LogList: 한박자 느린 Hitter변경, 현재 타자정보 변경 로직 미구현 - min27604/baseball/#15 * fix: 현재 투수표시- inning top이면 홈팀 투수, 아니면 원정팀 투수 - min27604/baseball/#15 - 기존에 isHome과 myTeam / counterTeam 으로 4가지 경우로 처리하던 것을 homeTeam, awayTeam을 이용하는 것으로 수정 * feat: PlayScreen-LogList 안타와 아웃시 totalOutCount++, CurrHitter 변경, 해당선수의 hit 변경 임시 성공 - min27604/baseball/#15 * chore: 오타 수정 * chore: S, B, H 나오는 확률 수정 * fix: 이닝, 초, 말 바꿔주는 로직 수정 - min27604/baseball/#15 * feat: LogList에 타자이름넣기 - min27604/baseball/#15 * feat: 현재 라운드 정보 표시 (회초, 회말, 공수) - min27604/baseball/#15 * feat: LogList 일부 수정 그러나 미완성 - LogList는 현재 H(타자가 안타를 바로 칠 경우)를 잡지 못함(B4개 ok), (O도 S3개 count해서 잡음) - Stadium에서 S가 3번째 되었을 때 setTimeout으로 한번 보여주고 -> O으로 변경한게 문제로 보임 -min27604/baseball/#15 Co-authored-by: Sally Oh <[email protected]> Co-authored-by: ink-0 <[email protected]>
안녕하세요! 우디입니다😃
사실 코드는.. 거의 작성하지 못했지만 테이블에 대한 리뷰를 받고싶어서 PR을 요청드리게 되었습니다!
DB 설계가 쉽지 않네요ㅠㅠ 부족한 점이 많지만 리뷰 잘 부탁드리겠습니다...!⭐️
설계한 DB 테이블
테이블 설명
⚾️ 게임 관련 테이블
1. game
2. inning
😂 사실 inning 테이블의 out 속성 부분이 아직 고민입니다. 이렇게 inning 내부에 out 속성을 넣게되면, 한 선수가 out 할 때마다 해당 inning 데이터에 update 요청을 해야하고, 한 선수의 플레이가 끝날 때마다 결국 최종적으로 저장되는 out 카운트는 항상 3이 되어버립니다ㅠㅠ
차라리 한 선수의 턴이 끝났을 때 저장되는 play_history 테이블 내부에 out에 대한 속성을 추가하는게 좋을까요..?👀
(ex) play_history 에 저장될 데이터 (out 속성 추가할 경우)
- 선수 1 | 안타 | out = 0
- 선수 2 | 아웃 | out = 1
- 선수 3 | 안타 | out = 1
3. play
4. play_history
(+) ? 중계 영역이란
⚾️ 팀 관련 테이블
1. team
2. player
is_pitcher
)3. player_score
⚾️ 유저 관련 테이블
1. user
2. user_selected
😂 사실 이 부분도 아직까지 고민입니다...! 처음에는 user 테이블에 하나의 속성으로 추가해주려했지만, 유저가 팀을 선택하기 전에는 속성 값이 계속 null로 처리가 되어있을 것 같아서 테이블로 빼주었습니다ㅠㅠ 그냥 user 테이블에 '유저가 선택한 팀 정보'에 대한 속성을 추가해주어도 상관없을까요?👀 어느 방법이 맞는지 잘 모르겠습니다.. 흛
DB 설계 뿐만 아니라 제가 설계한 DB를 설명하는 것도 쉬운 일이 아니네요ㅠㅠ
설명이 매우 부족하긴 하지만.. 끝까지 읽어주셔서 감사합니다..!