Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
40406ff
chore: eslintrc(airbnb), prettier 설치
jinmidnight01 Oct 25, 2023
f129f91
docs: README.md 생성
jinmidnight01 Oct 25, 2023
7873a11
feat(models): OpponentNumber.js 생성
jinmidnight01 Oct 25, 2023
dc02098
feat(constants): Messages.js 생성
jinmidnight01 Oct 25, 2023
d601c9a
feat(views): GameStart.js 생성
jinmidnight01 Oct 25, 2023
e09d93c
feat(constants): Conditions.js 생성
jinmidnight01 Oct 25, 2023
81774a8
refactor(constants): 함수 이름 대문자로 수정
jinmidnight01 Oct 25, 2023
0db5e44
feat(constants): Conditions.js에 NUMBER_LENGTH 필드 추가
jinmidnight01 Oct 25, 2023
e16a54e
feat(utils): RandomNumber.js 추가
jinmidnight01 Oct 25, 2023
bb27fc1
Merge branch 'feature/utils' into feature/controllers
jinmidnight01 Oct 25, 2023
eda71c7
refactor(models): OpponentNumber 클래스 주석 수정
jinmidnight01 Oct 25, 2023
6736c07
style: eslintrc(airbnb), prettier 적용
jinmidnight01 Oct 25, 2023
a96d9f3
docs: README.md 생성
jinmidnight01 Oct 25, 2023
c956347
docs: README.md 브랜치 전략 수정
jinmidnight01 Oct 25, 2023
a6c9075
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
026d419
docs: README.md Controllers 내용 추가
jinmidnight01 Oct 25, 2023
6214e76
feat(controllers): Controller 클래스 생성
jinmidnight01 Oct 25, 2023
e419300
feat(models): constructor 구현
jinmidnight01 Oct 25, 2023
2c8a18a
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
445f5cf
style: .eslintrc.json에 jest 추가
jinmidnight01 Oct 25, 2023
4a6d787
Merge branch 'develop' into feature/controllers
jinmidnight01 Oct 25, 2023
381f385
feat(models): constructor 주석 추가, getter 함수 구현
jinmidnight01 Oct 25, 2023
efb45b2
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
43adda1
refactor(models): Opponent로 클래스 이름 변경
jinmidnight01 Oct 25, 2023
c2b1b39
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
3a8d7d1
refactor(models): Opponent로 클래스/파일 이름 변경
jinmidnight01 Oct 25, 2023
7771916
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
e88ac6f
feat(constants): NUMBER_REGEX 필드 추가
jinmidnight01 Oct 25, 2023
5ac5223
Merge branch 'feature/constants' into feature/controllers
jinmidnight01 Oct 25, 2023
e535c43
feat(controllers): 상대방 숫자 생성 함수 수정, 테스트 코드 추가
jinmidnight01 Oct 25, 2023
239a27a
feat(models): User 모델 추가
jinmidnight01 Oct 25, 2023
95886f1
feat(constants): Message.js에 INPUT_NUMBER 필드 추가
jinmidnight01 Oct 25, 2023
de68358
Merge branch 'feature/constants' into feature/views
jinmidnight01 Oct 25, 2023
cc01658
feat(views): views 함수 수정 및 추가
jinmidnight01 Oct 25, 2023
39d87ea
Merge branch 'feature/views' into feature/controllers
jinmidnight01 Oct 25, 2023
324ae15
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
b56a3c0
feat(utils): CheckValidation 함수 추가
jinmidnight01 Oct 25, 2023
8d47dc2
Merge branch 'feature/utils' into feature/controllers
jinmidnight01 Oct 25, 2023
eff3831
refactor(utils): CheckValidation 함수 입력 params type 변경
jinmidnight01 Oct 25, 2023
7e610f5
feat(models): User 모델 setNumber 함수 수정
jinmidnight01 Oct 25, 2023
be29ba5
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
f0360da
feat(models): User.js에 getter 함수 추가
jinmidnight01 Oct 25, 2023
59f445a
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
becf18c
Merge branch 'feature/utils' into feature/controllers
jinmidnight01 Oct 25, 2023
6859efb
Merge branch 'feature/constants' into feature/utils
jinmidnight01 Oct 25, 2023
fcbcb57
refactor(utils): CheckValidation.js 수정
jinmidnight01 Oct 25, 2023
6df370c
feat(constants): CONDITIONS에 필드 추가
jinmidnight01 Oct 25, 2023
da4484c
feat(constants): MESSAGES에 필드 추가
jinmidnight01 Oct 25, 2023
72705d2
feat(controllers): saveUserInput 함수 추가
jinmidnight01 Oct 25, 2023
d65b349
refactor(constants): 필드명 수정
jinmidnight01 Oct 25, 2023
c1bec49
Merge branch 'feature/utils' into feature/controllers
jinmidnight01 Oct 25, 2023
675c410
Merge branch 'feature/constants' into feature/controllers
jinmidnight01 Oct 25, 2023
4181477
Merge branch 'feature/constants' into feature/views
jinmidnight01 Oct 25, 2023
657318f
feat(views): OutputView 파일/함수 추가
jinmidnight01 Oct 25, 2023
db9fca4
Merge branch 'feature/views' into feature/controllers
jinmidnight01 Oct 25, 2023
0641874
feat(controllers): matchNumber 함수 추가
jinmidnight01 Oct 25, 2023
5c48d1e
feat(views): RESTART_VIEW 함수 추가
jinmidnight01 Oct 25, 2023
aa7bf8f
Merge branch 'feature/views' into feature/controllers
jinmidnight01 Oct 25, 2023
4b8f47d
feat(constants): RESTART 필드 추가
jinmidnight01 Oct 25, 2023
0e9211e
Merge branch 'feature/constants' into feature/controllers
jinmidnight01 Oct 25, 2023
c788776
feat(models): User모델에 재시작 여부 필드 및 관련 함수 추가
jinmidnight01 Oct 25, 2023
aea56fa
Merge branch 'feature/models' into feature/controllers
jinmidnight01 Oct 25, 2023
b107b6d
feat(controllers): saveUserRestart 함수 추가
jinmidnight01 Oct 25, 2023
0d5637c
refactor(views): OUTPUT_VIEW 함수 수정
jinmidnight01 Oct 25, 2023
2970880
Merge branch 'feature/views' into feature/controllers
jinmidnight01 Oct 25, 2023
ca4a59b
refactor(controllers): matchNumber 함수 수정
jinmidnight01 Oct 25, 2023
5cc7a22
fix(controllers): matchNumber 함수 버그 해결
jinmidnight01 Oct 25, 2023
3892891
docs: README.md models 수정
jinmidnight01 Oct 25, 2023
3ee60ef
feat(develop): App.js에서 애플리케이션 완성
jinmidnight01 Oct 25, 2023
c7e6c28
Merge 'feature/constants' into develop
jinmidnight01 Oct 25, 2023
9ee2607
Merge branch 'feature/utils' into develop
jinmidnight01 Oct 25, 2023
92f323c
Merge branch 'feature/views' into develop
jinmidnight01 Oct 25, 2023
16f2fbe
Merge branch 'feature/models' into develop
jinmidnight01 Oct 25, 2023
3564f8c
Merge branch 'feature/controllers' into develop
jinmidnight01 Oct 25, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"env": {
"browser": true,
"es6": true,
"node": true,
"jest": true
},
"extends": [
"airbnb",
"plugin:prettier/recommended"
],
"rules": {
"import/prefer-default-export": "off",
"import/extensions": "off"
},
"parserOptions": {
"ecmaVersion": 2022
}
}
14 changes: 14 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"arrowParens": "always",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"jsxSingleQuote": false,
"printWidth": 80,
"proseWrap": "always",
"quoteProps": "as-needed",
"semi": true,
"singleQuote": false,
"tabWidth": 2,
"trailingComma": "es5",
"useTabs": false
}
26 changes: 26 additions & 0 deletions __tests__/ValidationTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Controller from "../src/controllers/Controller.js";
import CONDITIONS from "../src/constants/Conditions.js";

describe("CheckOpponentNumber", () => {
const controller = new Controller();
const opponentNumber = controller.generateOpponent().getNumber();

it("숫자로만 이루어진 Number 자료형", () => {
expect(Number.isNaN(opponentNumber)).toBe(false);
expect(typeof opponentNumber).toBe("number");
});

it("숫자 길이 3자리", () => {
expect(opponentNumber.toString().length).toBe(3);
});

it("숫자 중복없이 3자리", () => {
const numberSet = new Set(opponentNumber.toString());
expect(numberSet.size).toBe(3);
});

it("1~9로만 이루어진 3자리", () => {
const validation = CONDITIONS.NUMBER_REGEX.test(opponentNumber.toString());
expect(validation).toBe(true);
});
});
106 changes: 106 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
## 기능 그룹 (MVC + α)

* Models
- [x] 상대방(컴퓨터)이 설정한 임의의 3자리 숫자 데이터
- [x] 사용자가 입력한 3자리 숫자 / 재시작 여부 데이터


* Views
- [x] 게임 시작 메세지 출력
1. `Console.print` API 메서드 사용
- [x] 사용자 숫자 입력창 및 메세지 출력
1. `Console.readLineAsync` API 메서드 사용
- [x] 사용자가 입력한 숫자에 대한 평가 결과 출력
1. `볼`과 `스트라이크` 1개 이상씩 있을 경우: `O볼 O스트라이크`
- [x] 사용자 재시작 입력창 및 메세지 출력
1. `Console.readLineAsync` API 메서드 사용


* Controllers
- [x] 상대방(컴퓨터)의 숫자 생성
- [x] 상대방의 숫자와 사용자가 입력한 숫자를 비교하여 평가
1. 숫자와 위치가 일치: `스트라이크`
2. 숫자가 일치하고 위치가 다름: `볼`
3. 숫자와 위치가 모두 다름: `낫싱`
4. 숫자와 위치가 '전부' 일치: `게임 종료`
- [x] 재시작 입력창에 입력된 값에 따라, 게임 재시작 또는 완전 종료
1. `1` 이 입력되면 게임 재시작
2. `2` 가 입력되면 게임 완전 종료


* utils
- [x] 랜덤으로 3자리 숫자 생성
1. `Random.pickNumberInRange()` 메서드 사용
- [x] 사용자가 입력한 숫자가 입력 형식에 맞는지 검사
1. `12s` 과 같이 숫자이외의 문자가 있는지 검사
2. `12` 과 같이 3자리가 아닌지 검사
3. `122` 과 같이 중복된 숫자가 있는지 검사
4. `120` 과 같이 1~9 사이 이외의 숫자로 이루어진 문자열인지 검사
5. 재시작/종료 입력에 `1` 또는 `2` 가 입력되었는지 검사


* constants
- [x] 출력에 사용되는 메세지들
- [x] 입력 형식에 대한 조건들


## 코드 스타일 및 브랜치 전략
* 코드 스타일
- <details>
<summary>eslint 사용</summary>

`npm install eslint --save-dev` 로 eslint를 설치한다.

.eslintrc.json 파일을 생성하여 코드 스타일을 정의한다.
</details>

- <details>
<summary>airbnb 규칙 사용</summary>

`npx install-peerdeps --dev eslint-config-airbnb` 명령으로 설치한다.

.eslintrc.json의 `"extends" : [...]` 에 `"airbnb"` 를 추가한다.
</details>

- <details>
<summary>prettier 사용</summary>

`npm install prettier --save-dev` 로 prettier를 설치한다.

`npm install eslint-config-prettier eslint-plugin-prettier` 로 충돌을 방지한다.

> `eslint-config-prettier`: prettier와 겹치는 eslint 룰을 비활성화한다.
>
> `eslint-plugin-prettier`: prettier에서 발생한 오류를 eslint 오류로 표시해준다.

.eslintrc.json의 `"extends" : [...]` 에 `"plugin:prettier/recommended"` 를 추가한다.

.prettierrc.json 파일을 생성한 후 prettier 규칙을 추가한다.
</details>

- <details>
<summary>JSDoc 작성</summary>

클래스, 함수, 변수의 문서화 및 타입을 명확히 하기 위해 JSDoc을 작성한다.

```js
/**
* 두 숫자의 합을 연산하는 함수
* @param {number} a
* @param {number} b
* @returns {number}
*/
function sum(a, b) {
return a + b;
}
```
</details>


* 브랜치 전략
- Git Flow 전략을 기본으로 사용하되 아래의 사항을 지킨다.
- 최종 브랜치는 'jinmidnight01' 이다.
- 기능 그룹 단위로 'feature/{feature}' 브랜치에서 작업한다.
> 특정 기능 그룹에서 merge를 통해 다른 기능 그룹의 코드를 불러와 작업한다.
- 특정 기능 그룹이 완성되면 'develop' 브랜치에 병합한다.
- 애플리케이션이 완성되면 'develop' 브랜치를 최종 브랜치에 병합한다.
Loading