Skip to content
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

[임루트] 체스 스프링 실습 3단계 제출합니다. #147

Merged
merged 8 commits into from
May 3, 2020
Merged

Conversation

ttkmw
Copy link

@ttkmw ttkmw commented Apr 30, 2020

안녕하세요~ 임루트입니다.
실습 3단계 리뷰도 잘 부탁드립니다~!^^

mintjordy and others added 7 commits April 25, 2020 11:11
* Initial commit

* initial commit

* upgrade library version, config useJUnitPlatform

* [동글] 체스 미션 1주차 제출합니다. (#87)

* [Test] 테스트란다

* docs: 기능 구현 목록 생성

* feat: 위치 객체 생성

* feat: Position 캐싱 적용

* feat: Position 캐싱 추가 구현

* test: 체스말 테스트 코드 추가

* feat: 게임 말, 폰, 팀 클래스 추가

* feat: 모든 종류 체스말 클래스 생성

* feat: 명령어 enum 추가

* docs: README 수정

* refactor: Piece 내의 Position 제거

* feat: 체스 말 도달 가능 경로 반환 로직 추가

* feat: 직선경로 여부 판단로직 추가

* feat: 두 체스말의 행이 일치하는지 확인하는 기능 구현

* feat: 두 위치의 행이 일치하는 경우 경로 계산

* docs: 기능목록 수정

* feat: 보드 클래스 추가

* test: Board의 생성 테스트 작성

* feat: 보드 위 체스말 이동 기능 추가

* feat: MoveValidStrategy 클래스 생성

* feat: 주어진 경로(List<Position>)안에 말이 있는지 판별하는 로직 추가

* test: 체스말의 경로 이동 가능 여부 테스트 추가

* feat: 랭크 대소 비교 로직 추가

* feat: 파일(열) 비교 로직 추가

* refactor: PieceTest를 PawnTest와 RookTest로 분리

* feat: string을 통해 File 객체 찾기 추가

* refactor: Strategy관련 코드 삭제, Board내부로 체스말 이동 로직 옮김

* feat: 흑팀 체스말 초기화

* feat: 백팀 체스말 초기화, View 생성

* feat: 체스판 출력 기능

* feat: Team판별 로직 추가

* feat: 체스판 출력 기능 보완

* feat: 컨트롤러 생성

* feat: 게임 명령어 입력 기능 추가

* feat: 1단계 완료

* feat: 게임 시작 메시지 출력 메서드 추가

* feat: controller에 while문 추가

* feat: 이동할 좌표 입력 메서드 추가

* feat: 비숍 이동 여부 확인 기능 추가

* feat: 주어진 두 위치가 대각선인지 확인하는 로직 추가

* feat: 비숍의 좌상 대각선 방면 경로 확인 기능

* feat: 대각선 위치의 두 Position의 경로를 찾는 메서드 추가

* test: 비숍이동 로직 테스트 작성

* feat: 대각선 위치의 두 Position의 경로를 찾는 메서드 구현

* feat: 퀸 이동 기능 구현

* test: 퀸, 나이트, 킹 테스트 코드 추가

* feat: King 이동 가능 여부 판단 메서드 생성

* feat: King 이동 가능 여부 판단 메서드 구현

* feat: Knight 이동 가능 여부 판단 메서드 구조 구현

* test: Pawn 테스트 코드 작성

* test: Pawn의 첫 움직임 테스트 코드 작성

* test: Pawn 두칸 이동시 첫이동 여부 확인

* feat: Pawn의 움직임이 유효한지 체크하는 로직 추가

* feat: Pawn의 이동경로 반환 기능 구현

* feat: 상대 말을 잡는 로직 생성

* refactor: Bishop 이동경로 구하는 로직 변경

* feat: King, Knight 이동경로 구하는 로직 변경

* feat: 두 Position 사이의 모든 Position들을 반환하는 메서드 추가

* fix: Pawn 이동 로직 버그 수정

* fix: 테스트코드 fail 해결

* feat: 게임 종료 기능 구현

* refactor: 반복 조건 변경

* feat: 점수계산, 킹 잡힘 여부 확인 로직 수정

* feat: 기물의 이동과 기물의 catch 분리, 폰 움직임 버그 수정

* refactor: 개선된 보드 클래스 적용

* refactor: 메서드 포장

* feat: 현재 남아있는 체스말 기준 팀별 점수 계산 구현

* feat: 게임중 예외 발생시 명령어 재 입력 기능

* feat: Position 행, 열 중복 제거

* fix: 테스트 코드 버그 수정

* refactor: 일부 메서드 이름 수정

* refactor: 불필요 클래스 제거

* feat: 웹 UI 추가, 게임 시작시 , 게임 판 초기화, 점수판 갱신

* feat: 체스게임 상태 패턴 적용, 명령어별 컨트롤러 실행로직 enum 집중화

* test: 테스트 케이스 추가

* test: 테스트 케이스 추가

* fix: 킹이 잡혀서 게임이 끝나는 경우, 승자 출력안되는 버그 수정

* test: command 테스트 케이스 추가

Co-authored-by: 황준호 <42054054+hwanghe159@users.noreply.github.com>

* [동글] 체스 웹/DB 미션 제출합니다. (#152)

* refactor: 일부 클래스, 메소드 이름 변경, 메서드 추출, Board 일부 로직 변경

* feat: 팀별 점수 계산 기능 클래스 추출

* feat: 체스 기물 이미지 추가

* feat: 팀별 점수 반환기능 추가

* style: code formatting

* feat: 보드위 놓여있는 모든 기물 dto 목록 반환 기능 추가

* feat: 보드위 기물 이동 기능, 변화 생긴 지점 BoardDTO 목록 반환 기능 추가

* feat: 웹 UI  체스말 이동 기능 추가

* fix: 게임 중간에 재시작을 누르는 경우, 게임턴이 백팀으로 초기화 되지 않는 버그 수정

* feat: 체스 말 이동 기능 추가

* fix: 체스 기물 이미지 클릭시, cell이 클릭 되지 않는 버그 수정

* feat: 웹상 게임 상태 종료 여부 체크, 조건에 따른 게임 종료 기능 추가

* feat: data base 연결 추가

* docs: 기능목록 구현 갱신

* refactor: http api response 구조 변경 위한 response 관련 클래스 추가

* refactor: 응답 json 데이터 응답상태, 데이터, 메시지 형태로 포맷화

* refactor: dao에서 사용하는 jdbc 공통 로직 jdbctemplate로 분리

* fix: jdbc template out of bound index exception 버그 수정

* refactor: controller 모든 응답 내 try-catch 문 중복 제거

* refactor: jdbc template 내 중복 제거, DAO find 반환 타입 optional 변경

* refactor: 게임 상태 변경 요청 로직내 if-else 문 중복 제거

* refactor: 상태 값 반환 타입 enum 에서 string 으로 변경

* refactor: index 페이지 랜더링 객체 static 변수로 미리 생성

* refactor: 문자열 -> board 객체 파싱로직 리팩토링, 생성자 인자 null 검증 추가

* refactor: 점수 계산 기능 Result 객체로 위임

* refactor: 피드백 반영

* refactor: js 함수들 변수로 표현

* test: service 테스트 추가

* chore : 기존 체스 구현 가져옴

* refactor : 이동경로 반환 전략 적용

* refactor : 보드를 파싱하는 로직을 분리

* refactor : StateType enum 제거

* refactor : GameState을 Game으로 수정

* Board 에서 parseString() 지우기

* refactor : 패키지 구조 변경 및 import 문 정리

* refactor : board parser 매직넘버 제거, 변수명 변경

Co-authored-by: 박재성 <pobi@woowahan.com>
Co-authored-by: 황준호 <42054054+hwanghe159@users.noreply.github.com>
* feat : spring 컨트롤러 작성

* feat : spring 컨트롤러 작성 완료

* refactor : 기존 예외처리 로직 controller에서 service로 이동, 알트 피드백 반영

* fix : 충돌 해결

* style : 자바 컨벤션에 맞도록 코드 수정

* fix : 병합 충돌 해결

* refactor : chess controller view, rest controller 로 분리
Copy link

@jnsorn jnsorn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3단계도 잘 구현해주셨어요! 😊💯
단계가 올라갈수록 점점 깔끔해지는 것 같아서 보기 좋습니다!
다만 사용하지 않는 파일들은 모두 제거해주시면 좋을 것 같아요.(repository package 관련)
생각해보면 좋을 것 같은 코멘트 몇 개 남겼으니 참고해주시고, 4단계도 화이팅입니다~ 연휴 잘보내요!

Comment on lines 38 to 40
GameEntity gameEntity = gameRepository.findById(DEFAULT_USER_ID)
.orElseThrow(() -> new NoSuchElementException(NONE_ELEMENT_QUERY_RESULT_EXCEPTION_MESSAGE));
Game game = gameEntity.toDomain();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GameService 전체에 위 로직이 반복되는데, 메서드로 추출하여 중복된 코드를 제거하는 건 어떨까요?
중복된 코드가 존재하면, 유지보수가 어려워집니다!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그렇네요! 수정했습니다 감사합니다~~

Comment on lines 42 to 44
List<ScoreDto> scores = status.getStatus().entrySet().stream()
.map(entry -> new ScoreDto(entry.getKey().getTeam(), entry.getValue()))
.collect(Collectors.toList());
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entry에서 값들을 꺼내서 전달하기 보다는 Entry를 매개변수로 받는 ScoreDto 생성자를 만들어보면 어떨까요?

 List<ScoreDto> scores = status.getStatus().entrySet().stream()
                .map(ScoreDto::new)
                .collect(Collectors.toList())
public ScoreDto(Map.Entry<Team, Double> entry) {
	this(entry.getKey().getTeam(), entry.getValue());
}

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

친절히 작성해주셔서 쉽게 반영할 수 있었습니다 감사합니다~

@ttkmw
Copy link
Author

ttkmw commented May 3, 2020

repository 패키지 내 사용하지 않는 파일들도 지웠습니다~!

@woowahan-pjs woowahan-pjs merged commit eeec215 into woowacourse:p-vibe May 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants