forked from woowacourse/jwp-subway-path
-
Notifications
You must be signed in to change notification settings - Fork 0
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호선 VIP #14
Open
woo-chang
wants to merge
40
commits into
woowacourse-code-review-study:main
Choose a base branch
from
woo-chang:step2
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
2호선 VIP #14
Changes from all commits
Commits
Show all changes
40 commits
Select commit
Hold shift + click to select a range
a4327ac
[1단계 - 지하철 정보 관리 기능] 다즐(최우창) 미션 제출합니다. (#14)
woo-chang d95a57e
build: 최단 경로 라이브러리 의존성 추가
woo-chang 28d5842
docs: 기능 요구사항 추가
woo-chang 189f140
feat: 거리에 따른 요금 계산 기능 구현
woo-chang 825bef1
build: 최단 경로 라이브러리 의존성 수정
woo-chang 2b05c90
refactor: Line에서 필요하지 않은 구간 정보 필터링하도록 수정
woo-chang 03a2ad7
feat: 출발역과 도착역 사이의 최단 경로, 거리를 구하는 기능 구현
woo-chang 2bdd661
refactor: 지하철 역을 통해 경로를 조회하도록 수정
woo-chang 7ffb165
feat: 지하철 노선 기능 추출
woo-chang 6a4adfa
chore: 메서드명 수정
woo-chang 085ad8f
feat: 지하철에서 최단 경로 조회 기능 구현
woo-chang d3563ff
feat: 최단 경로 조회 API 구현
woo-chang 9de64b8
feat: 노선에 추가 요금 정보 추가
woo-chang d565e54
feat: 노선 추가 요금 구현
woo-chang 0bba461
feat: 거리별 추가요금 정책 구현
woo-chang 6e0d4c1
feat: 지하철 맵을 통해 최단 경로, 최단 거리 구하는 기능 구현
woo-chang 4315242
feat: 거리에 따른 요금을 계산하는 기능 구현
woo-chang 422ee0d
feat: 노선 추가 요금에 따른 요금을 계산하는 기능 구현
woo-chang b86b7bc
feat: 나이에 따른 할인 금액 계산 기능 구현
woo-chang 2cfc943
feat: 나이에 따른 요금 계산 기능 구현
woo-chang 5e2c0ad
feat: 복합 요구 정책을 수행하기 위한 기능 구현
woo-chang c5a393c
refactor: 노선 정보, 탑승자 정보 추가에 대한 수정
woo-chang 5721896
refactor: 경로 조회 시 반환하고자 하는 정보 수정
woo-chang b9b7435
feat: 경로 조회 기능 구현
woo-chang b182c26
test: 경로 조회 API 통합 테스트
woo-chang 9b7471a
refactor: 사용하지 않는 클래스 제거
woo-chang 10d83f8
docs: API 명세 문서화
woo-chang 4539c99
chore: 코드 컨벤션 수정
woo-chang b49b926
refactor: 청소년, 어린이인 경우에만 공제가 이루어지도록 수정
woo-chang ea0d0cf
chore: 코드 컨벤션 수정
woo-chang 6f45d17
refactor: 노선에 역 추가하는 기능 리팩토링
woo-chang ca69a6a
fix: 다음 노선 번호로 업데이트되지 않는 문제 수정
woo-chang b3461b8
feat: 프로덕션과 테스트 데이터베이스 설정 분리
woo-chang 469118d
docs: 애플리케이션 빠른 실행을 위한 문서화
woo-chang ac9382c
refactor: 행위에 대한 의미 부여를 위한 메서드 추출
woo-chang bbfecb6
refactor: 요금 정책 생성을 테스트 안에서 수행하도록 수정
woo-chang 084d6c0
refactor: dto swagger 예시 작성
woo-chang 50bfbb3
test: 구간 목록 테스트 추가
woo-chang 8d88f7f
refactor: FareStrategyComposite를 컴포넌트 스캔으로 빈 등록
woo-chang 1d0e6c3
refactor: 환경에 따른 설정 수정
woo-chang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,75 @@ | ||
# jwp-subway-path | ||
# jwp-subway-path | ||
|
||
## Quick Start | ||
|
||
```text | ||
cd docker | ||
|
||
docker-compose -p subway up | ||
``` | ||
|
||
## API 문서 | ||
|
||
```text | ||
http://localhost:8080/swagger-ui/index.html#/ | ||
``` | ||
|
||
## 기능 요구사항 | ||
|
||
### 역 | ||
|
||
- [x] 역은 고유한 식별자를 가진다. | ||
- [x] 역 이름은 `역`으로 끝나야 한다. | ||
- [x] 역 이름은 2글자에서 11글자까지 가능하다. | ||
- [x] 역 이름은 한글 + 숫자로만 이루어져야 한다. | ||
|
||
### 구역 | ||
|
||
- [x] 구역은 두 역과 역 사이의 거리를 가진다. | ||
- [x] 거리는 양의 정수이고, 단위는 km이다. | ||
|
||
### 노선 | ||
|
||
- [x] 노선 이름은 숫자 + `호선` 이다. | ||
- [x] 숫자는 1 ~ 9까지 가능하다. | ||
|
||
- [x] 노선의 색은 `색`으로 끝나야 한다. | ||
- [x] 색 이름은 2글자에서 11글자까지 가능하다. | ||
|
||
- [x] 역을 추가할 수 있어야 한다. | ||
-[x] 역을 추가할 때, 상행, 하행 역의 정보와 거리 정보를 입력받는다. | ||
- 최초 등록이 아닐 경우, 상행역 또는 하행역 어느 한 가지도 존재하지 않으면 예외를 던진다. | ||
-[x] 하나의 역은 여러 노선에 등록될 수 있다. | ||
-[x] 두 역의 가운데에 다른 역을 등록할 때, 기존 거리를 고려해야 한다. | ||
|
||
- [x] 역이 2개 이상 등록된 노선을 전부 보여주어야 한다. | ||
|
||
- [x] 구역은 역 순서대로 저장되어 있어야 한다. | ||
- [x] 노선 번호를 입력받으면, 노선에 포함된 역을 순서대로 보여주어야 한다. | ||
|
||
- [x] 역을 제거할 수 있어야 한다. | ||
-[x] 역을 제거하면 남은 역을 재배치 해야 한다. | ||
-[x] 노선에서 역이 제거되면 역과 역 사이의 거리도 재배정되어야 한다. | ||
-[x] 노선에 등록된 역이 2개인 경우 하나의 역을 제거할 때 두 역이 모두 제거되어야 한다. | ||
|
||
### 지하철 | ||
|
||
- [x] 출발역과 도착역 사이의 최단 경로를 구한다. | ||
- [x] 총 거리 정보를 함께 응답한다. | ||
|
||
### 요금 정책 | ||
|
||
- [x] 거리에 따른 요금을 계산한다. | ||
- 기본운임(10㎞ 이내): 기본운임 1,250원 | ||
- 이용 거리 초과 시 추가운임 부과 | ||
- 10km~50km: 5km 까지 마다 100원 추가 | ||
- 50km 초과: 8km 까지 마다 100원 추가 | ||
|
||
- [x] 노선에 따른 요금을 계산한다. | ||
- 추가 요금이 있는 노선을 이용하면 측정된 요금에 추가한다. | ||
- 경로 중 추가 요금이 있는 노선을 환승하여 이용하면 가장 높은 금액의 추가 요금만 적용한다. | ||
|
||
- [x] 연령에 따른 요금 할인을 계산한다. | ||
- 연령에 따른 요금 할인 정책을 반영한다. | ||
- 청소년: 운임에서 350원을 공제한 금액의 20% 할인 | ||
- 어린이: 운임에서 350원을 공제한 금액의 50% 할인 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,30 @@ | ||
plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '2.7.9' | ||
id 'io.spring.dependency-management' version '1.0.15.RELEASE' | ||
id 'java' | ||
id 'org.springframework.boot' version '2.7.9' | ||
id 'io.spring.dependency-management' version '1.0.15.RELEASE' | ||
} | ||
|
||
sourceCompatibility = '11' | ||
|
||
repositories { | ||
mavenCentral() | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
implementation 'org.springframework.boot:spring-boot-starter-web' | ||
implementation 'org.springframework.boot:spring-boot-starter-jdbc' | ||
implementation 'org.springframework.boot:spring-boot-starter-web' | ||
implementation 'org.springframework.boot:spring-boot-starter-jdbc' | ||
implementation 'org.springframework.boot:spring-boot-starter-validation' | ||
implementation 'net.rakugakibox.spring.boot:logback-access-spring-boot-starter:2.7.1' | ||
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0' | ||
implementation 'org.jgrapht:jgrapht-core:1.5.2' | ||
implementation 'mysql:mysql-connector-java:8.0.33' | ||
|
||
implementation 'net.rakugakibox.spring.boot:logback-access-spring-boot-starter:2.7.1' | ||
testImplementation 'io.rest-assured:rest-assured:4.4.0' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
|
||
testImplementation 'io.rest-assured:rest-assured:4.4.0' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
|
||
runtimeOnly 'com.h2database:h2' | ||
runtimeOnly 'com.h2database:h2' | ||
} | ||
|
||
test { | ||
useJUnitPlatform() | ||
} | ||
useJUnitPlatform() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
MYSQL_DATABASE=subway | ||
MYSQL_ROOT_PASSWORD=1234 | ||
MYSQL_USER=subway | ||
MYSQL_PASSWORD=1234 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
version: "3" | ||
services: | ||
app: | ||
container_name: app | ||
image: arm64v8/amazoncorretto:11-alpine-jdk | ||
ports: | ||
- "8080:8080" | ||
environment: | ||
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/${MYSQL_DATABASE}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 | ||
SPRING_DATASOURCE_USERNAME: ${MYSQL_USER} | ||
SPRING_DATASOURCE_PASSWORD: ${MYSQL_PASSWORD} | ||
volumes: | ||
- ../src:/app/src | ||
- ../gradle:/app/gradle | ||
- ../build.gradle:/app/build.gradle | ||
- ../gradlew:/app/gradlew | ||
- ../gradlew.bat:/app/gradlew.bat | ||
working_dir: /app | ||
command: [ "./gradlew", "bootrun" ] | ||
depends_on: | ||
- db | ||
restart: always | ||
|
||
db: | ||
container_name: db | ||
image: mysql:8.0.33 | ||
ports: | ||
- "3307:3306" | ||
environment: | ||
MYSQL_DATABASE: ${MYSQL_DATABASE} | ||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} | ||
MYSQL_USER: ${MYSQL_USER} | ||
MYSQL_PASSWORD: ${MYSQL_PASSWORD} | ||
volumes: | ||
- ../src/main/resources/data.sql:/docker-entrypoint-initdb.d/init.sql | ||
- ./mysql.cnf:/etc/mysql/conf.d/mysql.cnf | ||
restart: always |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Copyright (c) 2015, 2021, Oracle and/or its affiliates. | ||
# | ||
# This program is free software; you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License, version 2.0, | ||
# as published by the Free Software Foundation. | ||
# | ||
# This program is also distributed with certain software (including | ||
# but not limited to OpenSSL) that is licensed under separate terms, | ||
# as designated in a particular file or component or in included license | ||
# documentation. The authors of MySQL hereby grant you an additional | ||
# permission to link the program and your derivative works with the | ||
# separately licensed software that they have included with MySQL. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License, version 2.0, for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
|
||
# | ||
# The MySQL Client configuration file. | ||
# | ||
# For explanations see | ||
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html | ||
|
||
[client] | ||
default-character-set=utf8mb4 | ||
|
||
[mysqld] | ||
character-set-client-handshake=FALSE | ||
init_connect="SET collation_connection=utf8mb4_unicode_ci" | ||
init_connect="SET NAMES utf8mb4" | ||
character-set-server=utf8mb4 | ||
default_time_zone=Asia/Seoul | ||
lower_case_table_names=1 | ||
|
||
[mysql] | ||
default-character-set=utf8mb4 | ||
|
||
[mysqldump] | ||
default-character-set=utf8mb4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package subway.config; | ||
|
||
import io.swagger.v3.oas.models.Components; | ||
import io.swagger.v3.oas.models.OpenAPI; | ||
import io.swagger.v3.oas.models.info.Info; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
|
||
@Configuration | ||
public class SwaggerConfiguration { | ||
|
||
@Bean | ||
public OpenAPI openAPI() { | ||
final Info info = new Info() | ||
.title("지하철 API Document") | ||
.version("v0.0.1") | ||
.description("지하철 API 명세서입니다."); | ||
return new OpenAPI() | ||
.components(new Components()) | ||
.info(info); | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Swagger 👍