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

[2단계 - 웹 기반 로또 게임] 초코(강다빈) 미션 제출합니다. #327

Merged
merged 32 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
62baebc
feat: README.md에 기능 목록 작성
00kang Feb 26, 2024
dd41dab
feat: 스타일 가이드에 맞게 기본 속성 설정
00kang Feb 26, 2024
4f41559
feat: header, vody, footer 구조 만들기
00kang Feb 26, 2024
ac429f0
feat: 구입할 금액 입력 UI 구현
00kang Feb 27, 2024
d42a7c7
feat: 구입할 금액 입력 동작 구현 및 구입 버튼에 이벤트 추가
00kang Feb 27, 2024
981d8fe
feat: step2 전용 로또 컨트롤러 생성
00kang Feb 28, 2024
7c09a47
feat: 구입금액에 따른 로또 발행 css 구현
00kang Feb 28, 2024
c2ff8dd
feat: 구입 금액에 따른 로또 발행 컨트롤러 연결
00kang Feb 29, 2024
88ffc94
feat: 구입 금액에 따른 로또 티켓 발행
00kang Feb 29, 2024
e055ac1
feat: 당첨번호, 보너스 번호 입력 및 결과 확인하기 버튼 구현
00kang Feb 29, 2024
1d3cf9a
feat: 결과 확인하기 버튼 클릭시 나오는 모달 ui 구현
00kang Feb 29, 2024
daae585
feat: 모달 창 내의 결과값 컨트롤러 연결
00kang Feb 29, 2024
79403d1
feat: 모달창 닫기, 모달창에서 재시작 기능 구현
00kang Feb 29, 2024
065f781
feat: 구입 금액에 대한 유효성 검사 미통과시 에러 메시지 출력 구현
00kang Feb 29, 2024
c13e5c7
feat: 구입 금액에 대한 유효성 검사 추가
00kang Mar 1, 2024
d42f37d
refactor: 로또 발행 갯수 메서드 분리 및 OUTPUT_MESSAGE 활용
00kang Mar 1, 2024
63e1378
refactor: 로또 발행 및 출력 메서드 eslint(max-per-lines) 오류에 따라 분리
00kang Mar 1, 2024
449345e
refactor: 메서드명 일관성 부여 및 eslint(max-lines-per-function) 오류 해결을 위해 메서드 분리
00kang Mar 1, 2024
e7599a5
style: 에러 메시지 영역 확보를 위한 스타일링 수정
00kang Mar 1, 2024
2157f3d
feat: 당첨번호 및 보너스 번호 입력 구현
00kang Mar 3, 2024
5df0790
fix: 당첨번호와 보너스 번호 각각 유효한 값일 경우에만 결과 확인하기 가능하도록 수정
00kang Mar 3, 2024
211e979
feat: 게임 출력 결과 모달창 수정
00kang Mar 4, 2024
d5a85bd
feat: 게임실행 파라미터 eslint(max-params) 오류 해결을 위해 {}로 묶기 및 모달창 닫기 추가 구현
00kang Mar 4, 2024
978151a
style: css 선택자 간결화
00kang Mar 4, 2024
761dcba
feat: README.md 업데이트
00kang Mar 4, 2024
6cd14e1
feat: 빌드 스크립트 추가
00kang Mar 4, 2024
6c2a2d7
feat: README.md에 배포 링크 추가
00kang Mar 4, 2024
08a54ca
refactor: html 주석 제거 및 모달 css 분리
00kang Mar 6, 2024
86e59f3
refactor: event 객체로 접근
00kang Mar 7, 2024
a6119e6
refactor: 실행 방법 window.onload에서 DOMContentLoaded로 변경
00kang Mar 7, 2024
f6556c9
refactor: 구입 금액 입력값 숫자로 변환하는 메서드 분리
00kang Mar 7, 2024
4b3c9d2
refactor: 모듈에서 직접 호출 방식으로 변경
00kang Mar 7, 2024
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
6 changes: 4 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"env": {
"es6": true,
"node": true,
"jest": true
"jest": true,
"browser": true
},
"parserOptions": {
"ecmaVersion": "latest",
Expand Down Expand Up @@ -74,6 +75,7 @@
"caseInsensitive": true
}
}
]
],
"func-names": "off"
}
}
88 changes: 68 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,90 @@
<h2 align="middle">level1 - 행운의 로또</h2>
<p align="middle">자바스크립트로 구현 하는 로또 어플리케이션</p>

### 실행

```bash
npm run start-step1
```
## STEP1

### 테스트
### 실행 및 테스트

```bash
npm run test
npm run start-step1 //실행
npm run test //테스트
```

### 실행 화면

<img src="./lotto-step1.png" alt="실행화면" width="450">
<img src="./lotto-step1.png" alt="실행화면" width="450"/>

### 테스트 실행 화면

<img src="./lotto-step1-test.png" alt="테스트 실행화면" width="300">

### 도메인 로직
### 파일 구조

```
📦src
┣ 📂constant : 상수 관리
┃ ┣ 📜Messages.js : 입력, 입력힌트, 출력, 에러 메세지 관리
┃ ┗ 📜Options.js : 로또 가격, 로또 범위 최소, 최대 숫자, 상금, 게임 결과 등 관리
┣ 📂controller
┃ ┗ 📜LottoController.js : 로또 게임 진행
┣ 📂domain
┃ ┣ 📜Lotto.js
┃ ┗ 📜LottoMachine.js
┣ 📂util
┃ ┣ 📂random
┃ ┃ ┗ 📜Random.js
┃ ┣ 📂readLine
┃ ┃ ┗ 📜readLineAsync.js
┃ ┗ 📂validation
┃ ┃ ┣ 📜LottoNumbersValidator.js
┃ ┃ ┣ 📜PurchaseAmountValidator.js
┃ ┃ ┗ 📜Validation.js
┣ 📂view
┃ ┣ 📜InputView.js
┃ ┗ 📜OutputView.js
┣ 📜App.js
┣ 📜step1-index.js
┗ 📜step2-index.js

📦**tests** ┣ 📜.gitkeep ┣ 📜Lotto.test.js ┣ 📜LottoMachine.test.js ┗ 📜Random.test.js

```

</br>

## STEP2

### 배포 링크

[로또 페이지](https://00kang.github.io/javascript-lotto/)

### 실행

```bash
npm run start-step2
```

### 실행 화면

<img src="./lotto-step2-1.png" alt="실행화면" width="250"/>
<img src="./lotto-step2-2.png" alt="실행화면" width="250"/>
<img src="./lotto-step2-3.png" alt="실행화면" width="250"/>
<img src="./lotto-step2-4.png" alt="실행화면" width="250"/>

### 파일 구조

```
📦src
┣ 📂constant : 상수 관리
┃ ┣ 📜Messages.js : 입력, 입력힌트, 출력, 에러 메세지 관리
┃ ┗ 📜Options.js : 로또 가격, 로또 범위 최소, 최대 숫자, 상금, 게임 결과 등 관리
┣ 📂constant
┃ ┣ 📜Messages.js
┃ ┗ 📜Options.js
┣ 📂controller
┃ ┗ 📜LottoController.js : 로또 게임 진행
┃ ┣ 📜LottoController.js
┃ ┗ 📜step2-LottoController.js
┣ 📂css
┃ ┣ 📜reset.css
┃ ┣ 📜style.css
┃ ┗ 📜theme.css
┣ 📂domain
┃ ┣ 📜Lotto.js
┃ ┗ 📜LottoMachine.js
Expand All @@ -42,20 +95,15 @@ npm run test
┃ ┣ 📂readLine
┃ ┃ ┗ 📜readLineAsync.js
┃ ┗ 📂validation
┃ ┃ ┣ 📜BonusNumberValidator.js
┃ ┃ ┣ 📜LottoNumbersValidator.js
┃ ┃ ┣ 📜PurchaseAmountValidator.js
┃ ┃ ┣ 📜RestartValidator.js
┃ ┃ ┗ 📜Validation.js
┣ 📂view
┃ ┣ 📜InputView.js
┃ ┗ 📜OutputView.js
┣ 📜App.js
┣ 📜step1-index.js
┗ 📜step2-index.js

📦__tests__
┣ 📜.gitkeep
┣ 📜Lotto.test.js
┣ 📜LottoMachine.test.js
┗ 📜Random.test.js

```
103 changes: 98 additions & 5 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,109 @@
<!DOCTYPE html>
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>🎱 행운의 로또</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script type="module" src="./src/step2-index.js"></script>
</head>

<body>
<div id="app">
<h1>🎱 행운의 로또</h1>
<header>
<p class="title">🎱 행운의 로또</p>
</header>

<main>
<section>
<div id="mainTitleSection" class="section-div title">🎱 내 번호 당첨 확인 🎱</div>

<form id="purchaseInputSection" class="section-div body">
<label class="body" for="purchaseInputField">구입할 금액을 입력해주세요. </label>
<div>
<input id="purchaseInputField" class="placeholder" placeholder="금액" />
<button id="purchaseSubmitButton" class="caption" type="submit">구입</button>
</div>
<div id="purchaseError" class="error-message"></div>
</form>

<div id="lottoSection" class="section-div body" style="display: none">
<p id="lottoMainTitle" class="body"></p>
<div id="lottoBox"></div>
</div>

<form id="winningAndBonusSection" class="section-div body" style="display: none">
<p id="winningAndBonusTitle" class="body">
지난 주 당첨번호 6개와 보너스 번호 1개를 입력해주세요.
</p>
<div id="winningAndBonusInputSection">
<div class="winningAndBonusContainer">
<p class="body">당첨 번호</p>
<div id="winningInputContainer">
<input class="inputRectangle" />
<input class="inputRectangle" />
<input class="inputRectangle" />
<input class="inputRectangle" />
<input class="inputRectangle" />
<input class="inputRectangle" />
</div>
</div>
<div id="bonusInputContainer" class="winningAndBonusContainer">
<p class="body">보너스 번호</p>
<input class="inputRectangle" />
</div>
</div>
<div id="winningAndBonusError" class="error-message"></div>
<button id="winningAndBonusSubmitButton" class="caption" type="submit">
결과 확인하기
</button>
</form>
</section>
</main>

<!-- footer -->
<footer>
<p class="caption">Copyright 2023. woowacourse</p>
</footer>

<!-- modal -->
<div id="modalContainer" style="display: none">
<div id="modalWrapper">
<button id="modalCloseButton" class="title">X</button>
<p id="modalTitle" class="title">🏆 당첨 통계 🏆</p>
<table id="resultTable">
<tr>
<td class="subtitle">일치 갯수</td>
<td class="subtitle">당첨금</td>
<td class="subtitle">당첨 갯수</td>
</tr>
<tr>
<td class="body">3개</td>
<td class="body">5,000</td>
<td class="body"></td>
</tr>
<tr>
<td class="body">4개</td>
<td class="body">50,000</td>
<td class="body"></td>
</tr>
<tr>
<td class="body">5개</td>
<td class="body">1,500,000</td>
<td class="body"></td>
</tr>
<tr>
<td class="body">5개+보너스볼</td>
<td class="body">30,000,000</td>
<td class="body"></td>
</tr>
<tr>
<td class="body">6개</td>
<td class="body">2,000,000,000</td>
<td class="body"></td>
</tr>
</table>
<p id="profitResult" class="subtitle"></p>
<button id="resetButton" class="caption">다시 시작하기</button>
</div>
</div>
<script type="module" src="./src/js/index.js"></script>
</body>
</html>
Binary file added lotto-step2-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lotto-step2-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lotto-step2-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lotto-step2-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"test": "jest --watch --no-cache",
"build-step1": "webpack --config step1.config.js",
"start-step1": "npm run build-step1 && node dist/step1-bundle.js",
"build-step2": "webpack --mode production --config step2.config.js",
"start-step2": "webpack serve --open --config step2.config.js"
},
"devDependencies": {
Expand Down
1 change: 1 addition & 0 deletions src/constant/Messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export const VARIABLE_ALIAS = {

export const ERROR_MESSAGES = {
prefix: '[ERROR] ',
isNotNumber: (name) => `${name}(은)는 숫자만 가능합니다.`,
isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`,
isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`,
hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`,
Expand Down
Loading