From cd5a53ee0f32873f3c15d7fbd4baba05ed877f91 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:06:54 +0900 Subject: [PATCH 01/26] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 109 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..7e5d48143 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,109 @@ +# πŸ’ͺ ν”„λ‘œμ νŠΈ κ°œμš” + +μ§€ν•˜μ²  μ—­, λ…Έμ„ , ꡬ간을 κ΄€λ¦¬ν•˜κ³  μ§€ν•˜μ²  노선도λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œμ νŠΈλ₯Ό κ΅¬ν˜„ν•œλ‹€. + +# πŸ“ κ΅¬ν˜„ κΈ°λŠ₯ λͺ©λ‘ + +### 초기 섀정을 μ €μž₯ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `κ΅λŒ€μ—­, 강남역, μ—­μ‚Όμ—­, 남뢀터미널역, μ–‘μž¬μ—­, μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­, 맀봉역`을 μ§€ν•˜μ²  μ—­μœΌλ‘œ λ“±λ‘ν•œλ‹€. +- [ ] `2ν˜Έμ„ , 3ν˜Έμ„ , μ‹ λΆ„λ‹Ήμ„ `을 μ§€ν•˜μ²  λ…Έμ„ μœΌλ‘œ λ“±λ‘ν•œλ‹€. +- [ ] λ…Έμ„ λ§ˆλ‹€ μ—­μ˜ 정보λ₯Ό μ•„λž˜μ™€ 같이 λ“±λ‘ν•œλ‹€. + - `2ν˜Έμ„ : κ΅λŒ€μ—­ - 강남역 - μ—­μ‚Όμ—­` + - `3ν˜Έμ„ : κ΅λŒ€μ—­ - 남뢀터미널역 - μ–‘μž¬μ—­ - 맀봉역` + - `μ‹ λΆ„λ‹Ήμ„ : 강남역 - μ–‘μž¬μ—­ - μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­` + +### 메인 화면을 좜λ ₯ν•˜κ³  μ›ν•˜λŠ” κΈ°λŠ₯을 μž…λ ₯ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `## 메인 ν™”λ©΄`κ³Ό κΈ°λŠ₯의 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `Q`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [ ] μž…λ ₯에 따라 μ μ ˆν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•œλ‹€. + +### 역을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `## μ—­ 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [ ] 역을 λ“±λ‘ν•œλ‹€. + - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] 등둝할 μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. + - [ ] μ—­ 이름을 μ €μž₯ν•œλ‹€. + - [ ] `[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] 역을 μ‘°νšŒν•œλ‹€. + - [ ] `## μ—­ λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] μ €μž₯된 μ—­μ˜ 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. +- [ ] 역을 μ‚­μ œν•œλ‹€. + - [ ] `## μ‚­μ œν•  μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] μ—­ 이름을 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μž…λ ₯된 역을 μ‚­μ œν•œλ‹€. + - [ ] `[INFO] μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. + +### 노선을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `## λ…Έμ„  관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [ ] 노선을 λ“±λ‘ν•œλ‹€. + - [ ] `## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] 등둝할 λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. + - [ ] `## 등둝할 λ…Έμ„ μ˜ 상행 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] 상행 쒅점역 이름을 μž…λ ₯ν•œλ‹€. + - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] `## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•œλ‹€. + - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] λ…Έμ„  이름을 μ €μž₯ν•œλ‹€. + - [ ] `[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] 노선을 μ‘°νšŒν•œλ‹€. + - [ ] `## λ…Έμ„  λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] μ €μž₯된 λ…Έμ„ μ˜ 이름 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. +- [ ] 노선을 μ‚­μ œν•œλ‹€. + - [ ] `## μ‚­μ œν•  λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] λ…Έμ„  이름을 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μž…λ ₯된 노선을 μ‚­μ œν•œλ‹€. + - [ ] `[INFO] μ§€ν•˜μ²  노선이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. + +### ꡬ간을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `## ꡬ간 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [ ] ꡬ간을 λ“±λ‘ν•œλ‹€. + - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] ꡬ간을 μΆ”κ°€ν•  λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] ꡬ간에 μΆ”κ°€ν•  μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] 역을 μΆ”κ°€ν•  μˆœμ„œλ₯Ό μž…λ ₯λ°›λŠ”λ‹€. + - [ ] 숫자 μž…λ ₯이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] μΆ”κ°€ν•  수 μžˆλŠ” ꡬ간 λ²”μœ„λ₯Ό λ„˜μ–΄κ°„ 경우, λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [ ] `[INFO] ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] ꡬ간을 μ‚­μ œν•œλ‹€. + - [ ] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 노선을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] λ…Έμ„ μ˜ 이름을 μž…λ ₯ν•œλ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 역을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [ ] μ—­μ˜ 이름을 μž…λ ₯ν•œλ‹€. + - [ ] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [ ] ν•΄λ‹Ή 노선에 μ‘΄μž¬ν•˜λŠ” 역을 μ‚­μ œν•œλ‹€. + - [ ] `[INFO] ꡬ간이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. + +### μ§€ν•˜μ²  노선도λ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ + +- [ ] `## μ§€ν•˜μ²  노선도`λ₯Ό 좜λ ₯ν•œλ‹€. +- [ ] λ…Έμ„ κ³Ό ν•΄λ‹Ή 노선이 μ§€λ‚˜λŠ” μ—­μ˜ 정보λ₯Ό μ°¨λ‘€λ‘œ 좜λ ₯ν•œλ‹€. From f088050f775a2fe4676cfa003480bfad6666bc56 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:07:08 +0900 Subject: [PATCH 02/26] =?UTF-8?q?feat:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/global/exception/CustomException.java | 13 +++++++++++++ .../subway/global/exception/ErrorMessage.java | 15 +++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/subway/global/exception/CustomException.java create mode 100644 src/main/java/subway/global/exception/ErrorMessage.java diff --git a/src/main/java/subway/global/exception/CustomException.java b/src/main/java/subway/global/exception/CustomException.java new file mode 100644 index 000000000..240e93706 --- /dev/null +++ b/src/main/java/subway/global/exception/CustomException.java @@ -0,0 +1,13 @@ +package subway.global.exception; + +public class CustomException extends IllegalArgumentException { + private static final String PREFIX = "[ERROR] "; + + private CustomException(ErrorMessage errorMessage) { + super(PREFIX + errorMessage.getMessage()); + } + + public static CustomException from(ErrorMessage errorMessage) { + return new CustomException(errorMessage); + } +} diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java new file mode 100644 index 000000000..4674f1834 --- /dev/null +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -0,0 +1,15 @@ +package subway.global.exception; + +public enum ErrorMessage { + BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + + private final String message; + + ErrorMessage(String message) { + this.message = message; + } + + public String getMessage() { + return this.message; + } +} From 985b76a1cbfe7bf75034fb5870479b07d3fcea1a Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:07:25 +0900 Subject: [PATCH 03/26] =?UTF-8?q?feat:=20=EC=BD=98=EC=86=94=20=EC=9E=85?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/view/console/ConsoleReader.java | 26 +++++++++++++++++++ .../subway/view/console/ConsoleWriter.java | 11 ++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/subway/view/console/ConsoleReader.java create mode 100644 src/main/java/subway/view/console/ConsoleWriter.java diff --git a/src/main/java/subway/view/console/ConsoleReader.java b/src/main/java/subway/view/console/ConsoleReader.java new file mode 100644 index 000000000..47e757b10 --- /dev/null +++ b/src/main/java/subway/view/console/ConsoleReader.java @@ -0,0 +1,26 @@ +package subway.view.console; + +import java.util.Scanner; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public final class ConsoleReader { + Scanner scanner = new Scanner(System.in); + + public String enterMessage() { + return Validator.validate(scanner.nextLine()); + } + + private static class Validator { + public static String validate(String message) { + validateBlankInput(message); + return message; + } + + private static void validateBlankInput(String message) { + if (message.isBlank()) { + throw CustomException.from(ErrorMessage.BLANK_INPUT_ERROR); + } + } + } +} diff --git a/src/main/java/subway/view/console/ConsoleWriter.java b/src/main/java/subway/view/console/ConsoleWriter.java new file mode 100644 index 000000000..391adf4f1 --- /dev/null +++ b/src/main/java/subway/view/console/ConsoleWriter.java @@ -0,0 +1,11 @@ +package subway.view.console; + +public final class ConsoleWriter { + public static void printlnMessage(String message) { + System.out.println(message); + } + + public static void printlnFormat(String message, Object... args) { + printlnMessage(String.format(message, args)); + } +} From f811214721a1a03836169da5caffa310836ed22c Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:29:51 +0900 Subject: [PATCH 04/26] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=97=90=20=EC=84=9C=20=EC=97=AD=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=84=20=EB=AA=A8=EB=91=90=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../subway/controller/StationController.java | 16 ++++++++++ .../java/subway/service/StationService.java | 30 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/StationController.java create mode 100644 src/main/java/subway/service/StationService.java diff --git a/docs/README.md b/docs/README.md index 7e5d48143..4c55b978b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ ### 초기 섀정을 μ €μž₯ν•˜λŠ” κΈ°λŠ₯ -- [ ] `κ΅λŒ€μ—­, 강남역, μ—­μ‚Όμ—­, 남뢀터미널역, μ–‘μž¬μ—­, μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­, 맀봉역`을 μ§€ν•˜μ²  μ—­μœΌλ‘œ λ“±λ‘ν•œλ‹€. +- [x] `κ΅λŒ€μ—­, 강남역, μ—­μ‚Όμ—­, 남뢀터미널역, μ–‘μž¬μ—­, μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­, 맀봉역`을 μ§€ν•˜μ²  μ—­μœΌλ‘œ λ“±λ‘ν•œλ‹€. - [ ] `2ν˜Έμ„ , 3ν˜Έμ„ , μ‹ λΆ„λ‹Ήμ„ `을 μ§€ν•˜μ²  λ…Έμ„ μœΌλ‘œ λ“±λ‘ν•œλ‹€. - [ ] λ…Έμ„ λ§ˆλ‹€ μ—­μ˜ 정보λ₯Ό μ•„λž˜μ™€ 같이 λ“±λ‘ν•œλ‹€. - `2ν˜Έμ„ : κ΅λŒ€μ—­ - 강남역 - μ—­μ‚Όμ—­` diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java new file mode 100644 index 000000000..a9d51178c --- /dev/null +++ b/src/main/java/subway/controller/StationController.java @@ -0,0 +1,16 @@ +package subway.controller; + +import java.util.List; +import subway.service.SubwayService; + +public class StationController { + private final SubwayService subwayService; + + public StationController(SubwayService subwayService) { + this.subwayService = subwayService; + } + + public void addStations(List stations) { + subwayService.addAll(stations); + } +} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..fe08c0f26 --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,30 @@ +package subway.service; + +import java.util.List; +import subway.domain.Station; +import subway.domain.StationRepository; + +public class StationService implements SubwayService { + private final StationRepository stationRepository; + + public StationService(StationRepository stationRepository) { + this.stationRepository = stationRepository; + } + + @Override + public void addAll(List stations) { + for (String station : stations) { + stationRepository.addStation(new Station(station)); + } + } + + @Override + public void add(String station) { + stationRepository.addStation(new Station(station)); + } + + @Override + public void delete(String station) { + stationRepository.deleteStation(station); + } +} From 70268c7002e0eaacf6278cc73232199b993a96a1 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:31:47 +0900 Subject: [PATCH 05/26] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=97=90=EC=84=9C=20=EB=85=B8=EC=84=A0=EC=9D=98=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../subway/controller/LineController.java | 16 ++++++++++ src/main/java/subway/service/LineService.java | 30 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/LineController.java create mode 100644 src/main/java/subway/service/LineService.java diff --git a/docs/README.md b/docs/README.md index 4c55b978b..775c9e5b7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,7 +7,7 @@ ### 초기 섀정을 μ €μž₯ν•˜λŠ” κΈ°λŠ₯ - [x] `κ΅λŒ€μ—­, 강남역, μ—­μ‚Όμ—­, 남뢀터미널역, μ–‘μž¬μ—­, μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­, 맀봉역`을 μ§€ν•˜μ²  μ—­μœΌλ‘œ λ“±λ‘ν•œλ‹€. -- [ ] `2ν˜Έμ„ , 3ν˜Έμ„ , μ‹ λΆ„λ‹Ήμ„ `을 μ§€ν•˜μ²  λ…Έμ„ μœΌλ‘œ λ“±λ‘ν•œλ‹€. +- [x] `2ν˜Έμ„ , 3ν˜Έμ„ , μ‹ λΆ„λ‹Ήμ„ `을 μ§€ν•˜μ²  λ…Έμ„ μœΌλ‘œ λ“±λ‘ν•œλ‹€. - [ ] λ…Έμ„ λ§ˆλ‹€ μ—­μ˜ 정보λ₯Ό μ•„λž˜μ™€ 같이 λ“±λ‘ν•œλ‹€. - `2ν˜Έμ„ : κ΅λŒ€μ—­ - 강남역 - μ—­μ‚Όμ—­` - `3ν˜Έμ„ : κ΅λŒ€μ—­ - 남뢀터미널역 - μ–‘μž¬μ—­ - 맀봉역` diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java new file mode 100644 index 000000000..ac9202d53 --- /dev/null +++ b/src/main/java/subway/controller/LineController.java @@ -0,0 +1,16 @@ +package subway.controller; + +import java.util.List; +import subway.service.SubwayService; + +public class LineController { + private final SubwayService subwayService; + + public LineController(SubwayService subwayService) { + this.subwayService = subwayService; + } + + public void addLines(List lines) { + subwayService.addAll(lines); + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..b6c524fd6 --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,30 @@ +package subway.service; + +import java.util.List; +import subway.domain.Line; +import subway.domain.LineRepository; + +public class LineService implements SubwayService { + private final LineRepository lineRepository; + + public LineService(LineRepository lineRepository) { + this.lineRepository = lineRepository; + } + + @Override + public void addAll(List lines) { + for (String line : lines) { + lineRepository.addLine(new Line(line)); + } + } + + @Override + public void add(String line) { + lineRepository.addLine(new Line(line)); + } + + @Override + public void delete(String line) { + lineRepository.deleteLineByName(line); + } +} From ba70e6e5464771b12990855393a3ca260e61d3ff Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:46:13 +0900 Subject: [PATCH 06/26] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=EB=A7=88?= =?UTF-8?q?=EB=8B=A4=20=EC=97=AD=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=ED=95=98=EB=8A=94=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../subway/controller/RouteController.java | 17 ++++++++ src/main/java/subway/domain/Route.java | 18 +++++++++ .../java/subway/service/RouteService.java | 40 +++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/RouteController.java create mode 100644 src/main/java/subway/domain/Route.java create mode 100644 src/main/java/subway/service/RouteService.java diff --git a/docs/README.md b/docs/README.md index 775c9e5b7..707df7a44 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ - [x] `κ΅λŒ€μ—­, 강남역, μ—­μ‚Όμ—­, 남뢀터미널역, μ–‘μž¬μ—­, μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­, 맀봉역`을 μ§€ν•˜μ²  μ—­μœΌλ‘œ λ“±λ‘ν•œλ‹€. - [x] `2ν˜Έμ„ , 3ν˜Έμ„ , μ‹ λΆ„λ‹Ήμ„ `을 μ§€ν•˜μ²  λ…Έμ„ μœΌλ‘œ λ“±λ‘ν•œλ‹€. -- [ ] λ…Έμ„ λ§ˆλ‹€ μ—­μ˜ 정보λ₯Ό μ•„λž˜μ™€ 같이 λ“±λ‘ν•œλ‹€. +- [x] λ…Έμ„ λ§ˆλ‹€ μ—­μ˜ 정보λ₯Ό μ•„λž˜μ™€ 같이 λ“±λ‘ν•œλ‹€. - `2ν˜Έμ„ : κ΅λŒ€μ—­ - 강남역 - μ—­μ‚Όμ—­` - `3ν˜Έμ„ : κ΅λŒ€μ—­ - 남뢀터미널역 - μ–‘μž¬μ—­ - 맀봉역` - `μ‹ λΆ„λ‹Ήμ„ : 강남역 - μ–‘μž¬μ—­ - μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­` diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java new file mode 100644 index 000000000..be4f77b1d --- /dev/null +++ b/src/main/java/subway/controller/RouteController.java @@ -0,0 +1,17 @@ +package subway.controller; + +import java.util.List; +import java.util.Map; +import subway.service.RouteService; + +public class RouteController { + private final RouteService routeService; + + public RouteController(RouteService routeService) { + this.routeService = routeService; + } + + public void addRoutes(Map> route) { + routeService.addAll(route); + } +} diff --git a/src/main/java/subway/domain/Route.java b/src/main/java/subway/domain/Route.java new file mode 100644 index 000000000..55cbacba2 --- /dev/null +++ b/src/main/java/subway/domain/Route.java @@ -0,0 +1,18 @@ +package subway.domain; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Route { + private Map> route; + + public Route() { + this.route = new HashMap<>(); + } + + public void add(Line line, List stations) { + route.put(line, stations); + } + +} diff --git a/src/main/java/subway/service/RouteService.java b/src/main/java/subway/service/RouteService.java new file mode 100644 index 000000000..0f22d2102 --- /dev/null +++ b/src/main/java/subway/service/RouteService.java @@ -0,0 +1,40 @@ +package subway.service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Route; +import subway.domain.Station; +import subway.domain.StationRepository; + +public class RouteService { + private final Route route; + private final LineRepository lineRepository; + private final StationRepository stationRepository; + + public RouteService( + Route route, + LineRepository lineRepository, + StationRepository stationRepository + ) { + this.route = route; + this.lineRepository = lineRepository; + this.stationRepository = stationRepository; + } + + public void addAll(Map> elements) { + for (Map.Entry> entry : elements.entrySet()) { + String line = entry.getKey(); + List stations = entry.getValue(); + route.add(new Line(line), convertStations(stations)); + } + } + + private List convertStations(List stations) { + return stations.stream() + .map(Station::new) + .collect(Collectors.toList()); + } +} From a1f3aa8f411c0202a989d1e804f63abeb89dc64e Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:46:30 +0900 Subject: [PATCH 07/26] =?UTF-8?q?feat:=20SubwayManager=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=20=ED=9B=84=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=20=EC=A0=95=EB=B3=B4=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/SubwayManager.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/subway/controller/SubwayManager.java diff --git a/src/main/java/subway/controller/SubwayManager.java b/src/main/java/subway/controller/SubwayManager.java new file mode 100644 index 000000000..8dc1e5e2a --- /dev/null +++ b/src/main/java/subway/controller/SubwayManager.java @@ -0,0 +1,37 @@ +package subway.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SubwayManager { + private final LineController lineController; + private final StationController stationController; + private final RouteController routeController; + + public SubwayManager(LineController lineController, + StationController stationController, + RouteController routeController + ) { + this.lineController = lineController; + this.stationController = stationController; + this.routeController = routeController; + preprocess(); + } + + public void preprocess() { + List stations = List.of( + "κ΅λŒ€μ—­", "강남역", "μ—­μ‚Όμ—­", "남뢀터미널역", "μ–‘μž¬μ—­", "μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­", "맀봉역" + ); + stationController.addStations(stations); + List lines = List.of( + "2ν˜Έμ„ ", "3ν˜Έμ„ ", "μ‹ λΆ„λ‹Ήμ„ " + ); + lineController.addLines(lines); + Map> route = new HashMap<>(); + route.put("2ν˜Έμ„ ", List.of("κ΅λŒ€μ—­", "강남역", "μ—­μ‚Όμ—­")); + route.put("3ν˜Έμ„ ", List.of("κ΅λŒ€μ—­", "남뢀터미널역", "μ–‘μž¬μ—­", "맀봉역")); + route.put("μ‹ λΆ„λ‹Ήμ„ ", List.of("강남역", "μ–‘μž¬μ—­", "μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­")); + routeController.addRoutes(route); + } +} From c7ec5b1f8b1f02e0e8e41a79b8a5947e3e3f789f Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:46:49 +0900 Subject: [PATCH 08/26] =?UTF-8?q?feat:=20=EC=97=AD=EA=B3=BC=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/SubwayService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/subway/service/SubwayService.java diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java new file mode 100644 index 000000000..2a08ef834 --- /dev/null +++ b/src/main/java/subway/service/SubwayService.java @@ -0,0 +1,12 @@ +package subway.service; + +import java.util.List; + +public interface SubwayService { + + void addAll(List elements); + + void add(String element); + + void delete(String element); +} From cbeaab4f6d7b4fc7a3e9522542bbfdc9adf6d74d Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 16:59:40 +0900 Subject: [PATCH 09/26] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=97=90=EC=84=9C=20=EC=A0=9C=EA=B3=B5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=EC=9D=98=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=EC=9D=84=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/view/OutputView.java | 15 +++++++++++++++ .../java/subway/view/console/ConsoleWriter.java | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/docs/README.md b/docs/README.md index 707df7a44..d2b2deb2b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,7 +15,7 @@ ### 메인 화면을 좜λ ₯ν•˜κ³  μ›ν•˜λŠ” κΈ°λŠ₯을 μž…λ ₯ν•˜λŠ” κΈ°λŠ₯ -- [ ] `## 메인 ν™”λ©΄`κ³Ό κΈ°λŠ₯의 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [x] `## 메인 ν™”λ©΄`κ³Ό κΈ°λŠ₯의 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. - [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `Q`둜 μž…λ ₯λ°›λŠ”λ‹€. - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..8805f08c0 --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,15 @@ +package subway.view; + +import subway.view.console.ConsoleWriter; + +public class OutputView { + public void printMainScreen() { + ConsoleWriter.printlnMessage("## 메인 ν™”λ©΄"); + ConsoleWriter.printlnMessage("1. μ—­ 관리"); + ConsoleWriter.printlnMessage("2. λ…Έμ„  관리"); + ConsoleWriter.printlnMessage("3. ꡬ간 관리"); + ConsoleWriter.printlnMessage("4. μ§€ν•˜μ²  노선도 좜λ ₯"); + ConsoleWriter.printlnMessage("Q. μ’…λ£Œ"); + ConsoleWriter.println(); + } +} diff --git a/src/main/java/subway/view/console/ConsoleWriter.java b/src/main/java/subway/view/console/ConsoleWriter.java index 391adf4f1..9d65dfe77 100644 --- a/src/main/java/subway/view/console/ConsoleWriter.java +++ b/src/main/java/subway/view/console/ConsoleWriter.java @@ -8,4 +8,8 @@ public static void printlnMessage(String message) { public static void printlnFormat(String message, Object... args) { printlnMessage(String.format(message, args)); } + + public static void println() { + System.out.println(); + } } From 31581e630ddfccd80e7b0251a313c656f56eff43 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:00:27 +0900 Subject: [PATCH 10/26] =?UTF-8?q?feat:=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=ED=95=98=EA=B3=A0=20=EC=A3=BC=EC=96=B4?= =?UTF-8?q?=EC=A7=84=20=EC=9E=85=EB=A0=A5=EC=9D=B4=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=98=A4=EB=A5=98=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 ++--- .../domain/constants/FunctionCommand.java | 27 +++++++++++++++++++ .../subway/global/exception/ErrorMessage.java | 3 ++- src/main/java/subway/view/InputView.java | 16 +++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/domain/constants/FunctionCommand.java create mode 100644 src/main/java/subway/view/InputView.java diff --git a/docs/README.md b/docs/README.md index d2b2deb2b..5f8f217de 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,9 +16,9 @@ ### 메인 화면을 좜λ ₯ν•˜κ³  μ›ν•˜λŠ” κΈ°λŠ₯을 μž…λ ₯ν•˜λŠ” κΈ°λŠ₯ - [x] `## 메인 ν™”λ©΄`κ³Ό κΈ°λŠ₯의 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. -- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `Q`둜 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `Q`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. - [ ] μž…λ ₯에 따라 μ μ ˆν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•œλ‹€. ### 역을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ diff --git a/src/main/java/subway/domain/constants/FunctionCommand.java b/src/main/java/subway/domain/constants/FunctionCommand.java new file mode 100644 index 000000000..f138ad9cb --- /dev/null +++ b/src/main/java/subway/domain/constants/FunctionCommand.java @@ -0,0 +1,27 @@ +package subway.domain.constants; + +import java.util.Arrays; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public enum FunctionCommand { + STATION("1"), + LINE("2"), + ROUTE("3"), + PRINT("4"), + QUIT("Q"); + + private final String command; + + FunctionCommand(String command) { + this.command = command; + } + + public static FunctionCommand from(String command) { + return Arrays.stream(FunctionCommand.values()) + .filter(element -> element.command.equals(command)) + .findFirst() + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_FUNCTION_COMMAND)); + } + +} diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index 4674f1834..1d6494672 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -1,7 +1,8 @@ package subway.global.exception; public enum ErrorMessage { - BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."), + INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."); private final String message; diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..6a74e4049 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,16 @@ +package subway.view; + +import subway.domain.constants.FunctionCommand; +import subway.view.console.ConsoleReader; + +public class InputView { + private final ConsoleReader consoleReader; + + public InputView(ConsoleReader consoleReader) { + this.consoleReader = consoleReader; + } + + public FunctionCommand enterFunction() { + return FunctionCommand.from(consoleReader.enterMessage()); + } +} From 6023eb9b56f2a79a434119d0b9894f0bb4e2e170 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:04:51 +0900 Subject: [PATCH 11/26] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EB=B6=84=EA=B8=B0=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=A0=81=EC=A0=88=ED=95=9C=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../java/subway/controller/SubwayManager.java | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 5f8f217de..8ca6c6737 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,7 +19,7 @@ - [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `Q`둜 μž…λ ₯λ°›λŠ”λ‹€. - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. -- [ ] μž…λ ₯에 따라 μ μ ˆν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•œλ‹€. +- [x] μž…λ ₯에 따라 μ μ ˆν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•œλ‹€. ### 역을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ diff --git a/src/main/java/subway/controller/SubwayManager.java b/src/main/java/subway/controller/SubwayManager.java index 8dc1e5e2a..52bd2d416 100644 --- a/src/main/java/subway/controller/SubwayManager.java +++ b/src/main/java/subway/controller/SubwayManager.java @@ -3,16 +3,23 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import subway.domain.constants.FunctionCommand; +import subway.view.InputView; +import subway.view.OutputView; public class SubwayManager { + private final OutputView outputView; + private final InputView inputView; private final LineController lineController; private final StationController stationController; private final RouteController routeController; - public SubwayManager(LineController lineController, + public SubwayManager(OutputView outputView, InputView inputView, LineController lineController, StationController stationController, RouteController routeController ) { + this.outputView = outputView; + this.inputView = inputView; this.lineController = lineController; this.stationController = stationController; this.routeController = routeController; @@ -34,4 +41,26 @@ public void preprocess() { route.put("μ‹ λΆ„λ‹Ήμ„ ", List.of("강남역", "μ–‘μž¬μ—­", "μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­")); routeController.addRoutes(route); } + + public void run() { + while (true) { + outputView.printMainScreen(); + FunctionCommand function = inputView.enterFunction(); + if (function.equals(FunctionCommand.STATION)) { + stationController.run(); + } + if (function.equals(FunctionCommand.LINE)) { + lineController.run(); + } + if (function.equals(FunctionCommand.ROUTE)) { + routeController.run(); + } + if (function.equals(FunctionCommand.PRINT)) { + routeController.print(); + } + if (function.equals(FunctionCommand.QUIT)) { + break; + } + } + } } From d039471a5fbf9ab28c6ed6f44ddc43c87c994e54 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:24:33 +0900 Subject: [PATCH 12/26] =?UTF-8?q?refactor:=20=EB=B7=B0=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=84=B1=EA=B2=A9=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=ED=95=98=EC=97=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/SubwayManager.java | 16 +++++++--------- src/main/java/subway/view/InputView.java | 16 ---------------- .../view/{OutputView.java => MainView.java} | 14 +++++++++++++- 3 files changed, 20 insertions(+), 26 deletions(-) delete mode 100644 src/main/java/subway/view/InputView.java rename src/main/java/subway/view/{OutputView.java => MainView.java} (56%) diff --git a/src/main/java/subway/controller/SubwayManager.java b/src/main/java/subway/controller/SubwayManager.java index 52bd2d416..f68c4f448 100644 --- a/src/main/java/subway/controller/SubwayManager.java +++ b/src/main/java/subway/controller/SubwayManager.java @@ -4,22 +4,20 @@ import java.util.List; import java.util.Map; import subway.domain.constants.FunctionCommand; -import subway.view.InputView; -import subway.view.OutputView; +import subway.view.MainView; public class SubwayManager { - private final OutputView outputView; - private final InputView inputView; + private final MainView mainView; private final LineController lineController; private final StationController stationController; private final RouteController routeController; - public SubwayManager(OutputView outputView, InputView inputView, LineController lineController, + public SubwayManager(MainView mainView, + LineController lineController, StationController stationController, RouteController routeController ) { - this.outputView = outputView; - this.inputView = inputView; + this.mainView = mainView; this.lineController = lineController; this.stationController = stationController; this.routeController = routeController; @@ -44,8 +42,8 @@ public void preprocess() { public void run() { while (true) { - outputView.printMainScreen(); - FunctionCommand function = inputView.enterFunction(); + mainView.printMainScreen(); + FunctionCommand function = mainView.enterFunction(); if (function.equals(FunctionCommand.STATION)) { stationController.run(); } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java deleted file mode 100644 index 6a74e4049..000000000 --- a/src/main/java/subway/view/InputView.java +++ /dev/null @@ -1,16 +0,0 @@ -package subway.view; - -import subway.domain.constants.FunctionCommand; -import subway.view.console.ConsoleReader; - -public class InputView { - private final ConsoleReader consoleReader; - - public InputView(ConsoleReader consoleReader) { - this.consoleReader = consoleReader; - } - - public FunctionCommand enterFunction() { - return FunctionCommand.from(consoleReader.enterMessage()); - } -} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/MainView.java similarity index 56% rename from src/main/java/subway/view/OutputView.java rename to src/main/java/subway/view/MainView.java index 8805f08c0..0d6489af4 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/MainView.java @@ -1,8 +1,20 @@ package subway.view; +import subway.domain.constants.FunctionCommand; +import subway.view.console.ConsoleReader; import subway.view.console.ConsoleWriter; -public class OutputView { +public class MainView { + private final ConsoleReader consoleReader; + + public MainView(ConsoleReader consoleReader) { + this.consoleReader = consoleReader; + } + + public FunctionCommand enterFunction() { + return FunctionCommand.from(consoleReader.enterMessage()); + } + public void printMainScreen() { ConsoleWriter.printlnMessage("## 메인 ν™”λ©΄"); ConsoleWriter.printlnMessage("1. μ—­ 관리"); From 9ad37f971a353ef5b21986f2c22066dbff8395e2 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:25:05 +0900 Subject: [PATCH 13/26] =?UTF-8?q?feat:=20=EC=97=AD=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=ED=9B=84=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 ++--- .../subway/controller/StationController.java | 24 ++++++++++++++- .../domain/constants/StationCommand.java | 26 +++++++++++++++++ src/main/java/subway/view/StationView.java | 29 +++++++++++++++++++ 4 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 src/main/java/subway/domain/constants/StationCommand.java create mode 100644 src/main/java/subway/view/StationView.java diff --git a/docs/README.md b/docs/README.md index 8ca6c6737..282f24673 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,10 +23,10 @@ ### 역을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ -- [ ] `## μ—­ 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. -- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [x] `## μ—­ 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. - [ ] 역을 λ“±λ‘ν•œλ‹€. - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 등둝할 μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index a9d51178c..891274ad6 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -1,16 +1,38 @@ package subway.controller; import java.util.List; +import subway.domain.constants.StationCommand; import subway.service.SubwayService; +import subway.view.StationView; public class StationController { private final SubwayService subwayService; + private final StationView stationView; - public StationController(SubwayService subwayService) { + public StationController(SubwayService subwayService, StationView stationView) { this.subwayService = subwayService; + this.stationView = stationView; } public void addStations(List stations) { subwayService.addAll(stations); } + + public void run() { + stationView.printFunctions(); + StationCommand function = stationView.enterFunction(); + if (function.equals(StationCommand.ADD)) { + addStation(); + } + if (function.equals(StationCommand.DELETE)) { + deleteStation(); + } + if (function.equals(StationCommand.GET)) { + getStation(); + } + } + + private void addStation() { + stationView.enterStationName(); + } } diff --git a/src/main/java/subway/domain/constants/StationCommand.java b/src/main/java/subway/domain/constants/StationCommand.java new file mode 100644 index 000000000..fb3e6e222 --- /dev/null +++ b/src/main/java/subway/domain/constants/StationCommand.java @@ -0,0 +1,26 @@ +package subway.domain.constants; + +import java.util.Arrays; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public enum StationCommand { + ADD("1"), + DELETE("2"), + GET("3"), + BACK("B"); + + private final String command; + + StationCommand(String command) { + this.command = command; + } + + public static StationCommand from(String command) { + return Arrays.stream(StationCommand.values()) + .filter(element -> element.command.equals(command)) + .findFirst() + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_FUNCTION_COMMAND)); + + } +} diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java new file mode 100644 index 000000000..04024005e --- /dev/null +++ b/src/main/java/subway/view/StationView.java @@ -0,0 +1,29 @@ +package subway.view; + +import subway.domain.constants.StationCommand; +import subway.view.console.ConsoleReader; +import subway.view.console.ConsoleWriter; + +public class StationView { + private final ConsoleReader consoleReader; + + public StationView(ConsoleReader consoleReader) { + this.consoleReader = consoleReader; + } + + public StationCommand enterFunction() { + return StationCommand.from(consoleReader.enterMessage()); + } + + public void enterStationName() { + return + } + + public void printFunctions() { + ConsoleWriter.printlnMessage("## μ—­ 관리 ν™”λ©΄"); + ConsoleWriter.printlnMessage("1. μ—­ 등둝"); + ConsoleWriter.printlnMessage("2. μ—­ μ‚­μ œ"); + ConsoleWriter.printlnMessage("3. μ—­ 쑰회"); + ConsoleWriter.printlnMessage("B. λŒμ•„κ°€κΈ°"); + } +} From aa4c9742cfae858bf6b4b19eb78817a071df8635 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:36:41 +0900 Subject: [PATCH 14/26] =?UTF-8?q?feat:=20=EC=97=AD=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=98=EA=B3=A0=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 10 +++++----- .../java/subway/controller/StationController.java | 3 ++- src/main/java/subway/domain/Station.java | 13 +++++++++++-- src/main/java/subway/domain/StationRepository.java | 8 ++++++++ .../java/subway/global/exception/ErrorMessage.java | 4 +++- src/main/java/subway/service/StationService.java | 5 +++++ src/main/java/subway/view/StationView.java | 4 ++-- 7 files changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index 282f24673..db85deaad 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,11 +28,11 @@ - [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. - [ ] 역을 λ“±λ‘ν•œλ‹€. - - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] 등둝할 μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. + - [x] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] 등둝할 μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. - [ ] μ—­ 이름을 μ €μž₯ν•œλ‹€. - [ ] `[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 역을 μ‘°νšŒν•œλ‹€. diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 891274ad6..6fb40c176 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -33,6 +33,7 @@ public void run() { } private void addStation() { - stationView.enterStationName(); + String name = stationView.enterStationName(); + subwayService.add(name); } } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..da0bd3429 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,15 +1,24 @@ package subway.domain; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + public class Station { + private static final int MIN_LENGTH = 2; private String name; public Station(String name) { + validateNameLength(name); this.name = name; } + private void validateNameLength(String name) { + if (name.length() < 2) { + throw CustomException.from(ErrorMessage.STATION_NAME_ERROR); + } + } + public String getName() { return name; } - - // μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..42bc09ee8 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; public class StationRepository { private static final List stations = new ArrayList<>(); @@ -19,4 +20,11 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static Optional findByName(String station) { + return stations.stream() + .map(Station::getName) + .filter(name -> name.equals(station)) + .findFirst(); + } } diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index 1d6494672..d48a7a6b8 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -2,7 +2,9 @@ public enum ErrorMessage { BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."), - INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."); + INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."), + STATION_NAME_ERROR("μ˜¬λ°”λ₯Έ μ—­ 이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”."), + STATION_DUPLICATED_ERROR("μ€‘λ³΅λœ μ—­ 이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."); private final String message; diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index fe08c0f26..c7c403cba 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -3,6 +3,8 @@ import java.util.List; import subway.domain.Station; import subway.domain.StationRepository; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; public class StationService implements SubwayService { private final StationRepository stationRepository; @@ -20,6 +22,9 @@ public void addAll(List stations) { @Override public void add(String station) { + if (stationRepository.findByName(station).isPresent()) { + throw CustomException.from(ErrorMessage.STATION_DUPLICATED_ERROR); + } stationRepository.addStation(new Station(station)); } diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java index 04024005e..c358150e9 100644 --- a/src/main/java/subway/view/StationView.java +++ b/src/main/java/subway/view/StationView.java @@ -15,8 +15,8 @@ public StationCommand enterFunction() { return StationCommand.from(consoleReader.enterMessage()); } - public void enterStationName() { - return + public String enterStationName() { + return consoleReader.enterMessage(); } public void printFunctions() { From f655cc2fa239cda10624726f2bc8433f439ac879 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 17:38:46 +0900 Subject: [PATCH 15/26] =?UTF-8?q?feat:=20=EC=97=AD=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=84=20=EC=A0=80=EC=9E=A5=ED=95=98=EA=B3=A0=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- src/main/java/subway/controller/StationController.java | 1 + src/main/java/subway/domain/Station.java | 2 +- src/main/java/subway/view/StationView.java | 4 ++++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index db85deaad..24676693e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,14 +27,14 @@ - [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. -- [ ] 역을 λ“±λ‘ν•œλ‹€. +- [x] 역을 λ“±λ‘ν•œλ‹€. - [x] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] 등둝할 μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - [x] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - [x] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. - - [ ] μ—­ 이름을 μ €μž₯ν•œλ‹€. - - [ ] `[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] μ—­ 이름을 μ €μž₯ν•œλ‹€. + - [x] `[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 역을 μ‘°νšŒν•œλ‹€. - [ ] `## μ—­ λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] μ €μž₯된 μ—­μ˜ 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 6fb40c176..a078cd8f9 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -35,5 +35,6 @@ public void run() { private void addStation() { String name = stationView.enterStationName(); subwayService.add(name); + stationView.printAddResult(); } } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index da0bd3429..ebd3013c5 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -13,7 +13,7 @@ public Station(String name) { } private void validateNameLength(String name) { - if (name.length() < 2) { + if (name.length() < MIN_LENGTH) { throw CustomException.from(ErrorMessage.STATION_NAME_ERROR); } } diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java index c358150e9..c2f822c46 100644 --- a/src/main/java/subway/view/StationView.java +++ b/src/main/java/subway/view/StationView.java @@ -26,4 +26,8 @@ public void printFunctions() { ConsoleWriter.printlnMessage("3. μ—­ 쑰회"); ConsoleWriter.printlnMessage("B. λŒμ•„κ°€κΈ°"); } + + public void printAddResult() { + ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } } From d48278d0bfa3e788ae96d960d71c3a6796d6b1ef Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:06:39 +0900 Subject: [PATCH 16/26] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=ED=9B=84=20=EA=B8=B0=EB=8A=A5=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 18 +++++------ src/main/java/subway/domain/Line.java | 6 ++-- src/main/java/subway/domain/Station.java | 11 ++----- .../subway/domain/constants/LineCommand.java | 26 +++++++++++++++ .../subway/global/exception/ErrorMessage.java | 2 +- .../subway/global/validator/Validator.java | 12 +++++++ src/main/java/subway/view/LineView.java | 32 +++++++++++++++++++ src/main/java/subway/view/StationView.java | 2 ++ 8 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 src/main/java/subway/domain/constants/LineCommand.java create mode 100644 src/main/java/subway/global/validator/Validator.java create mode 100644 src/main/java/subway/view/LineView.java diff --git a/docs/README.md b/docs/README.md index 24676693e..5ebdc3cd4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,16 +48,16 @@ ### 노선을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ -- [ ] `## λ…Έμ„  관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. -- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [x] `## λ…Έμ„  관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. - [ ] 노선을 λ“±λ‘ν•œλ‹€. - - [ ] `## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] 등둝할 λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. + - [x] `## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] 등둝할 λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. - [ ] `## 등둝할 λ…Έμ„ μ˜ 상행 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 상행 쒅점역 이름을 μž…λ ₯ν•œλ‹€. - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..0855bd870 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,15 +1,17 @@ package subway.domain; +import subway.global.validator.Validator; + public class Line { + private static final int MIN_LENGTH = 2; private String name; public Line(String name) { + Validator.validateMinLength(name, MIN_LENGTH); this.name = name; } public String getName() { return name; } - - // μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index ebd3013c5..e72a033d9 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,23 +1,16 @@ package subway.domain; -import subway.global.exception.CustomException; -import subway.global.exception.ErrorMessage; +import subway.global.validator.Validator; public class Station { private static final int MIN_LENGTH = 2; private String name; public Station(String name) { - validateNameLength(name); + Validator.validateMinLength(name, MIN_LENGTH); this.name = name; } - private void validateNameLength(String name) { - if (name.length() < MIN_LENGTH) { - throw CustomException.from(ErrorMessage.STATION_NAME_ERROR); - } - } - public String getName() { return name; } diff --git a/src/main/java/subway/domain/constants/LineCommand.java b/src/main/java/subway/domain/constants/LineCommand.java new file mode 100644 index 000000000..41631259e --- /dev/null +++ b/src/main/java/subway/domain/constants/LineCommand.java @@ -0,0 +1,26 @@ +package subway.domain.constants; + +import java.util.Arrays; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public enum LineCommand { + ADD("1"), + DELETE("2"), + GET("3"), + BACK("B"); + + private final String command; + + LineCommand(String command) { + this.command = command; + } + + public static LineCommand from(String command) { + return Arrays.stream(LineCommand.values()) + .filter(element -> element.command.equals(command)) + .findFirst() + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_FUNCTION_COMMAND)); + + } +} diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index d48a7a6b8..a7f098d4c 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -3,7 +3,7 @@ public enum ErrorMessage { BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."), INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."), - STATION_NAME_ERROR("μ˜¬λ°”λ₯Έ μ—­ 이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”."), + INVALID_LENGTH_ERROR("μ˜¬λ°”λ₯Έ 길이의 λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”."), STATION_DUPLICATED_ERROR("μ€‘λ³΅λœ μ—­ 이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."); private final String message; diff --git a/src/main/java/subway/global/validator/Validator.java b/src/main/java/subway/global/validator/Validator.java new file mode 100644 index 000000000..ba25d63a0 --- /dev/null +++ b/src/main/java/subway/global/validator/Validator.java @@ -0,0 +1,12 @@ +package subway.global.validator; + +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public final class Validator { + public static void validateMinLength(String input, int min) { + if (input.length() < min) { + throw CustomException.from(ErrorMessage.INVALID_LENGTH_ERROR); + } + } +} diff --git a/src/main/java/subway/view/LineView.java b/src/main/java/subway/view/LineView.java new file mode 100644 index 000000000..517158f66 --- /dev/null +++ b/src/main/java/subway/view/LineView.java @@ -0,0 +1,32 @@ +package subway.view; + +import subway.domain.constants.LineCommand; +import subway.view.console.ConsoleReader; +import subway.view.console.ConsoleWriter; + +public class LineView { + private final ConsoleReader consoleReader; + + public LineView(ConsoleReader consoleReader) { + this.consoleReader = consoleReader; + } + + public LineCommand enterFunction() { + ConsoleWriter.printlnMessage("## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”."); + return LineCommand.from(consoleReader.enterMessage()); + } + + public String enterStationName() { + ConsoleWriter.printlnMessage("## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public void printFunctions() { + ConsoleWriter.printlnMessage("## λ…Έμ„  관리 ν™”λ©΄"); + ConsoleWriter.printlnMessage("1. λ…Έμ„  등둝"); + ConsoleWriter.printlnMessage("2. λ…Έμ„  μ‚­μ œ"); + ConsoleWriter.printlnMessage("3. λ…Έμ„  쑰회"); + ConsoleWriter.printlnMessage("B. λŒμ•„κ°€κΈ°"); + } + +} diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java index c2f822c46..7cd2c7b68 100644 --- a/src/main/java/subway/view/StationView.java +++ b/src/main/java/subway/view/StationView.java @@ -12,10 +12,12 @@ public StationView(ConsoleReader consoleReader) { } public StationCommand enterFunction() { + ConsoleWriter.printlnMessage("## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”."); return StationCommand.from(consoleReader.enterMessage()); } public String enterStationName() { + ConsoleWriter.printlnMessage("## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”."); return consoleReader.enterMessage(); } From 7a366b9eac0b4992cb60026c4d79a95a49d53736 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:10:26 +0900 Subject: [PATCH 17/26] =?UTF-8?q?feat:=20=EC=A0=80=EC=9E=A5=EB=90=9C=20?= =?UTF-8?q?=EC=97=AD=EC=9D=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 14 +++++++------- .../java/subway/controller/StationController.java | 8 +++++++- .../java/subway/global/exception/ErrorMessage.java | 10 ++++++++-- src/main/java/subway/service/StationService.java | 3 +++ src/main/java/subway/view/StationView.java | 11 ++++++++++- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index 5ebdc3cd4..a72d3f037 100644 --- a/docs/README.md +++ b/docs/README.md @@ -38,13 +38,13 @@ - [ ] 역을 μ‘°νšŒν•œλ‹€. - [ ] `## μ—­ λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] μ €μž₯된 μ—­μ˜ 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. -- [ ] 역을 μ‚­μ œν•œλ‹€. - - [ ] `## μ‚­μ œν•  μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] μ—­ 이름을 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μž…λ ₯된 역을 μ‚­μ œν•œλ‹€. - - [ ] `[INFO] μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] 역을 μ‚­μ œν•œλ‹€. + - [x] `## μ‚­μ œν•  μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] μ—­ 이름을 μž…λ ₯λ°›λŠ”λ‹€. + - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] μž…λ ₯된 역을 μ‚­μ œν•œλ‹€. + - [x] `[INFO] μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. ### 노선을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index a078cd8f9..d5885fafc 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -33,8 +33,14 @@ public void run() { } private void addStation() { - String name = stationView.enterStationName(); + String name = stationView.enterStationNameToAdd(); subwayService.add(name); stationView.printAddResult(); } + + private void deleteStation() { + String name = stationView.enterStationNameToDelete(); + subwayService.delete(name); + stationView.printDeleteResult(); + } } diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index a7f098d4c..9dffc95d7 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -1,10 +1,16 @@ package subway.global.exception; public enum ErrorMessage { + // String BLANK_INPUT_ERROR("빈 λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€."), - INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."), INVALID_LENGTH_ERROR("μ˜¬λ°”λ₯Έ 길이의 λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”."), - STATION_DUPLICATED_ERROR("μ€‘λ³΅λœ μ—­ 이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."); + + // Global + INVALID_FUNCTION_COMMAND("선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."), + + // Station + STATION_DUPLICATED_ERROR("μ€‘λ³΅λœ μ—­ 이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."), + STATION_NOT_FOUND_ERROR("μž…λ ₯ν•œ 역을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); private final String message; diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index c7c403cba..4defa0b54 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -30,6 +30,9 @@ public void add(String station) { @Override public void delete(String station) { + if (stationRepository.findByName(station).isEmpty()) { + throw CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR); + } stationRepository.deleteStation(station); } } diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java index 7cd2c7b68..d3c99d86e 100644 --- a/src/main/java/subway/view/StationView.java +++ b/src/main/java/subway/view/StationView.java @@ -16,11 +16,16 @@ public StationCommand enterFunction() { return StationCommand.from(consoleReader.enterMessage()); } - public String enterStationName() { + public String enterStationNameToAdd() { ConsoleWriter.printlnMessage("## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”."); return consoleReader.enterMessage(); } + public String enterStationNameToDelete() { + ConsoleWriter.printlnMessage("## μ‚­μ œν•  μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + public void printFunctions() { ConsoleWriter.printlnMessage("## μ—­ 관리 ν™”λ©΄"); ConsoleWriter.printlnMessage("1. μ—­ 등둝"); @@ -32,4 +37,8 @@ public void printFunctions() { public void printAddResult() { ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); } + + public void printDeleteResult() { + ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } } From 8ddcf6b7df99d71cae9d28946d63872aac3fe912 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:14:58 +0900 Subject: [PATCH 18/26] =?UTF-8?q?feat:=20=EC=97=AD=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- src/main/java/subway/controller/StationController.java | 4 ++++ src/main/java/subway/service/StationService.java | 9 +++++++++ src/main/java/subway/service/SubwayService.java | 2 ++ src/main/java/subway/view/StationView.java | 9 +++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index a72d3f037..385b5ce49 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,9 +35,9 @@ - [x] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. - [x] μ—­ 이름을 μ €μž₯ν•œλ‹€. - [x] `[INFO] μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] 역을 μ‘°νšŒν•œλ‹€. - - [ ] `## μ—­ λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] μ €μž₯된 μ—­μ˜ 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. +- [x] 역을 μ‘°νšŒν•œλ‹€. + - [x] `## μ—­ λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] μ €μž₯된 μ—­μ˜ 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. - [x] 역을 μ‚­μ œν•œλ‹€. - [x] `## μ‚­μ œν•  μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ—­ 이름을 μž…λ ₯λ°›λŠ”λ‹€. diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index d5885fafc..fdd68c80b 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -43,4 +43,8 @@ private void deleteStation() { subwayService.delete(name); stationView.printDeleteResult(); } + + private List getStation() { + stationView.printAllStation(subwayService.getAll()); + } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 4defa0b54..28fea2818 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -1,6 +1,7 @@ package subway.service; import java.util.List; +import java.util.stream.Collectors; import subway.domain.Station; import subway.domain.StationRepository; import subway.global.exception.CustomException; @@ -35,4 +36,12 @@ public void delete(String station) { } stationRepository.deleteStation(station); } + + @Override + public List getAll() { + return stationRepository.stations() + .stream() + .map(Station::getName) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 2a08ef834..5982d5ae5 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -9,4 +9,6 @@ public interface SubwayService { void add(String element); void delete(String element); + + List getAll(); } diff --git a/src/main/java/subway/view/StationView.java b/src/main/java/subway/view/StationView.java index d3c99d86e..4c703f3ad 100644 --- a/src/main/java/subway/view/StationView.java +++ b/src/main/java/subway/view/StationView.java @@ -1,5 +1,6 @@ package subway.view; +import java.util.List; import subway.domain.constants.StationCommand; import subway.view.console.ConsoleReader; import subway.view.console.ConsoleWriter; @@ -41,4 +42,12 @@ public void printAddResult() { public void printDeleteResult() { ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); } + + public void printAllStation(List stations) { + ConsoleWriter.printlnMessage("## μ—­ λͺ©λ‘"); + for (String station : stations) { + ConsoleWriter.printlnMessage("[INFO] " + station); + } + ConsoleWriter.println(); + } } From c6ee7255918992f7e3fdc8b087ec30e995d7784f Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:27:04 +0900 Subject: [PATCH 19/26] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9D=84=20=EC=A0=80=EC=9E=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- .../subway/controller/StationController.java | 10 ++++---- .../java/subway/domain/LineRepository.java | 8 +++++++ .../subway/global/exception/ErrorMessage.java | 6 ++++- src/main/java/subway/service/LineService.java | 13 +++++++++++ src/main/java/subway/view/LineView.java | 23 ++++++++++++++++++- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/docs/README.md b/docs/README.md index 385b5ce49..7377d1217 100644 --- a/docs/README.md +++ b/docs/README.md @@ -64,8 +64,8 @@ - [ ] `## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•œλ‹€. - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] λ…Έμ„  이름을 μ €μž₯ν•œλ‹€. - - [ ] `[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] λ…Έμ„  이름을 μ €μž₯ν•œλ‹€. + - [x] `[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 노선을 μ‘°νšŒν•œλ‹€. - [ ] `## λ…Έμ„  λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] μ €μž₯된 λ…Έμ„ μ˜ 이름 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index fdd68c80b..f76ff16a3 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -14,10 +14,6 @@ public StationController(SubwayService subwayService, StationView stationView) { this.stationView = stationView; } - public void addStations(List stations) { - subwayService.addAll(stations); - } - public void run() { stationView.printFunctions(); StationCommand function = stationView.enterFunction(); @@ -32,6 +28,10 @@ public void run() { } } + public void addStations(List stations) { + subwayService.addAll(stations); + } + private void addStation() { String name = stationView.enterStationNameToAdd(); subwayService.add(name); @@ -44,7 +44,7 @@ private void deleteStation() { stationView.printDeleteResult(); } - private List getStation() { + private void getStation() { stationView.printAllStation(subwayService.getAll()); } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..2f115a86f 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; public class LineRepository { private static final List lines = new ArrayList<>(); @@ -19,4 +20,11 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public Optional findByName(String line) { + return lines.stream() + .map(Line::getName) + .filter(name -> name.equals(line)) + .findFirst(); + } } diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index 9dffc95d7..191106322 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -10,7 +10,11 @@ public enum ErrorMessage { // Station STATION_DUPLICATED_ERROR("μ€‘λ³΅λœ μ—­ 이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."), - STATION_NOT_FOUND_ERROR("μž…λ ₯ν•œ 역을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); + STATION_NOT_FOUND_ERROR("μž…λ ₯ν•œ 역을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."), + + // Line + LINE_DUPLICATED_ERROR("μ€‘λ³΅λœ λ…Έμ„  이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."), + LINE_NOT_FOUND_ERROR("μž…λ ₯ν•œ 노선을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); private final String message; diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index b6c524fd6..e8753e36b 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -3,6 +3,8 @@ import java.util.List; import subway.domain.Line; import subway.domain.LineRepository; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; public class LineService implements SubwayService { private final LineRepository lineRepository; @@ -20,11 +22,22 @@ public void addAll(List lines) { @Override public void add(String line) { + if (lineRepository.findByName(line).isPresent()) { + throw CustomException.from(ErrorMessage.LINE_DUPLICATED_ERROR); + } lineRepository.addLine(new Line(line)); } @Override public void delete(String line) { + if (lineRepository.findByName(line).isEmpty()) { + throw CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR); + } lineRepository.deleteLineByName(line); } + + @Override + public List getAll() { + return null; + } } diff --git a/src/main/java/subway/view/LineView.java b/src/main/java/subway/view/LineView.java index 517158f66..4d4662f21 100644 --- a/src/main/java/subway/view/LineView.java +++ b/src/main/java/subway/view/LineView.java @@ -1,5 +1,6 @@ package subway.view; +import java.util.List; import subway.domain.constants.LineCommand; import subway.view.console.ConsoleReader; import subway.view.console.ConsoleWriter; @@ -16,11 +17,16 @@ public LineCommand enterFunction() { return LineCommand.from(consoleReader.enterMessage()); } - public String enterStationName() { + public String enterLineNameToAdd() { ConsoleWriter.printlnMessage("## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”."); return consoleReader.enterMessage(); } + public String enterLineNameToDelete() { + ConsoleWriter.printlnMessage("## μ‚­μ œν•  λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + public void printFunctions() { ConsoleWriter.printlnMessage("## λ…Έμ„  관리 ν™”λ©΄"); ConsoleWriter.printlnMessage("1. λ…Έμ„  등둝"); @@ -29,4 +35,19 @@ public void printFunctions() { ConsoleWriter.printlnMessage("B. λŒμ•„κ°€κΈ°"); } + public void printAddResult() { + ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } + + public void printDeleteResult() { + ConsoleWriter.printlnMessage("[INFO] μ§€ν•˜μ²  노선이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } + + public void printAllLines(List lines) { + ConsoleWriter.printlnMessage("## λ…Έμ„  λͺ©λ‘"); + for (String line : lines) { + ConsoleWriter.printlnMessage("[INFO] " + line); + } + ConsoleWriter.println(); + } } From 9d79999ea32e41c73cfcbe99b6843670aa128572 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:33:33 +0900 Subject: [PATCH 20/26] =?UTF-8?q?feat:=20=EC=83=81=ED=96=89=20=ED=95=98?= =?UTF-8?q?=ED=96=89=20=EC=97=AD=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EA=B3=A0=20=EB=85=B8=EC=84=A0=EC=9D=84=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 14 +++++++------- src/main/java/subway/domain/LineRepository.java | 5 ++--- src/main/java/subway/domain/StationRepository.java | 5 ++--- src/main/java/subway/service/RouteService.java | 12 ++++++++++++ src/main/java/subway/view/LineView.java | 11 +++++++++++ 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/docs/README.md b/docs/README.md index 7377d1217..4eebaedd7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,18 +52,18 @@ - [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. -- [ ] 노선을 λ“±λ‘ν•œλ‹€. +- [x] 노선을 λ“±λ‘ν•œλ‹€. - [x] `## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] 등둝할 λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - [x] μ€‘λ³΅λ˜λŠ” μ—­ 이름이 μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - [x] 2κΈ€μž μ΄μƒμž„μ„ κ²€μ¦ν•œλ‹€. - - [ ] `## 등둝할 λ…Έμ„ μ˜ 상행 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] 상행 쒅점역 이름을 μž…λ ₯ν•œλ‹€. - - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] `## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•œλ‹€. - - [ ] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] `## 등둝할 λ…Έμ„ μ˜ 상행 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] 상행 쒅점역 이름을 μž…λ ₯ν•œλ‹€. + - [x] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] `## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•œλ‹€. + - [x] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - [x] λ…Έμ„  이름을 μ €μž₯ν•œλ‹€. - [x] `[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] 노선을 μ‘°νšŒν•œλ‹€. diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 2f115a86f..42b59b01c 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -21,10 +21,9 @@ public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } - public Optional findByName(String line) { + public Optional findByName(String line) { return lines.stream() - .map(Line::getName) - .filter(name -> name.equals(line)) + .filter(name -> name.getName().equals(line)) .findFirst(); } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 42bc09ee8..15cf2aa72 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -21,10 +21,9 @@ public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } - public static Optional findByName(String station) { + public static Optional findByName(String station) { return stations.stream() - .map(Station::getName) - .filter(name -> name.equals(station)) + .filter(name -> name.getName().equals(station)) .findFirst(); } } diff --git a/src/main/java/subway/service/RouteService.java b/src/main/java/subway/service/RouteService.java index 0f22d2102..ce7eb6ec8 100644 --- a/src/main/java/subway/service/RouteService.java +++ b/src/main/java/subway/service/RouteService.java @@ -8,6 +8,8 @@ import subway.domain.Route; import subway.domain.Station; import subway.domain.StationRepository; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; public class RouteService { private final Route route; @@ -37,4 +39,14 @@ private List convertStations(List stations) { .map(Station::new) .collect(Collectors.toList()); } + + public void addRoute(String lineName, String headName, String tailName) { + Line line = lineRepository.findByName(lineName) + .orElseThrow(() -> CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR)); + Station head = stationRepository.findByName(headName) + .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); + Station tail = stationRepository.findByName(tailName) + .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); + route.add(line, List.of(head, tail)); + } } diff --git a/src/main/java/subway/view/LineView.java b/src/main/java/subway/view/LineView.java index 4d4662f21..1b6e91d32 100644 --- a/src/main/java/subway/view/LineView.java +++ b/src/main/java/subway/view/LineView.java @@ -50,4 +50,15 @@ public void printAllLines(List lines) { } ConsoleWriter.println(); } + + public String enterHeadStation() { + ConsoleWriter.printlnMessage("## 등둝할 λ…Έμ„ μ˜ 상행 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public String enterTailStation() { + ConsoleWriter.printlnMessage("## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + } From 6b16cbbd1897081f9310697f0f3e998a5b03ccd3 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:38:45 +0900 Subject: [PATCH 21/26] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 +++--- .../subway/controller/RouteController.java | 25 ++++++++++++++++++- .../subway/domain/constants/RouteCommand.java | 25 +++++++++++++++++++ src/main/java/subway/view/RouteView.java | 25 +++++++++++++++++++ 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/main/java/subway/domain/constants/RouteCommand.java create mode 100644 src/main/java/subway/view/RouteView.java diff --git a/docs/README.md b/docs/README.md index 4eebaedd7..3c6c9060c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -79,10 +79,10 @@ ### ꡬ간을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ -- [ ] `## ꡬ간 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. -- [ ] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. +- [x] `## ꡬ간 관리 ν™”λ©΄`κ³Ό 관리 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. + - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. - [ ] ꡬ간을 λ“±λ‘ν•œλ‹€. - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] ꡬ간을 μΆ”κ°€ν•  λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java index be4f77b1d..5ed304951 100644 --- a/src/main/java/subway/controller/RouteController.java +++ b/src/main/java/subway/controller/RouteController.java @@ -2,16 +2,39 @@ import java.util.List; import java.util.Map; +import subway.domain.constants.LineCommand; +import subway.domain.constants.RouteCommand; import subway.service.RouteService; +import subway.view.RouteView; public class RouteController { private final RouteService routeService; + private final RouteView routeView; - public RouteController(RouteService routeService) { + public RouteController(RouteService routeService, RouteView routeView) { this.routeService = routeService; + this.routeView = routeView; } public void addRoutes(Map> route) { routeService.addAll(route); } + + public void run() { + routeView.printFunctions(); + RouteCommand function = routeView.enterFunction(); + if (function.equals(LineCommand.ADD)) { + addRoute(); + } + if (function.equals(LineCommand.DELETE)) { + deleteRoute(); + } + } + + private void addRoute() { + } + + private void deleteRoute() { + + } } diff --git a/src/main/java/subway/domain/constants/RouteCommand.java b/src/main/java/subway/domain/constants/RouteCommand.java new file mode 100644 index 000000000..11ac25753 --- /dev/null +++ b/src/main/java/subway/domain/constants/RouteCommand.java @@ -0,0 +1,25 @@ +package subway.domain.constants; + +import java.util.Arrays; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; + +public enum RouteCommand { + ADD("1"), + DELETE("2"), + BACK("B"); + + private final String command; + + RouteCommand(String command) { + this.command = command; + } + + public static RouteCommand from(String command) { + return Arrays.stream(RouteCommand.values()) + .filter(element -> element.command.equals(command)) + .findFirst() + .orElseThrow(() -> CustomException.from(ErrorMessage.INVALID_FUNCTION_COMMAND)); + + } +} diff --git a/src/main/java/subway/view/RouteView.java b/src/main/java/subway/view/RouteView.java new file mode 100644 index 000000000..9d0cf67ac --- /dev/null +++ b/src/main/java/subway/view/RouteView.java @@ -0,0 +1,25 @@ +package subway.view; + +import subway.domain.constants.RouteCommand; +import subway.view.console.ConsoleReader; +import subway.view.console.ConsoleWriter; + +public class RouteView { + private final ConsoleReader consoleReader; + + public RouteView(ConsoleReader consoleReader) { + this.consoleReader = consoleReader; + } + + public void printFunctions() { + ConsoleWriter.printlnMessage("## ꡬ간 관리 ν™”λ©΄"); + ConsoleWriter.printlnMessage("1. ꡬ간 등둝"); + ConsoleWriter.printlnMessage("2. ꡬ간 μ‚­μ œ"); + ConsoleWriter.printlnMessage("B. λŒμ•„κ°€κΈ°"); + } + + public RouteCommand enterFunction() { + ConsoleWriter.printlnMessage("## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”."); + return RouteCommand.from(consoleReader.enterMessage()); + } +} From 74d2e96edc598de5a871dc132868793ea3e331c9 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Wed, 13 Dec 2023 18:53:12 +0900 Subject: [PATCH 22/26] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EB=8F=84=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 43 ++++++++++--------- .../subway/controller/LineController.java | 42 +++++++++++++++++- .../subway/controller/RouteController.java | 7 ++- src/main/java/subway/domain/Route.java | 8 ++++ .../subway/global/exception/ErrorMessage.java | 5 ++- .../subway/global/validator/Validator.java | 11 +++++ .../java/subway/service/RouteService.java | 8 ++++ src/main/java/subway/view/RouteView.java | 24 +++++++++++ 8 files changed, 124 insertions(+), 24 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3c6c9060c..cca618f35 100644 --- a/docs/README.md +++ b/docs/README.md @@ -83,27 +83,28 @@ - [x] `## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ›ν•˜λŠ” κΈ°λŠ₯을 숫자 ν˜Ήμ€ `B`둜 μž…λ ₯λ°›λŠ”λ‹€. - [x] μ£Όμ–΄μ§„ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” μž…λ ₯μž„μ„ κ²€μ¦ν•œλ‹€. -- [ ] ꡬ간을 λ“±λ‘ν•œλ‹€. - - [ ] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] ꡬ간을 μΆ”κ°€ν•  λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] ꡬ간에 μΆ”κ°€ν•  μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] 역을 μΆ”κ°€ν•  μˆœμ„œλ₯Ό μž…λ ₯λ°›λŠ”λ‹€. - - [ ] 숫자 μž…λ ₯이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μΆ”κ°€ν•  수 μžˆλŠ” ꡬ간 λ²”μœ„λ₯Ό λ„˜μ–΄κ°„ 경우, λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] `[INFO] ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] ꡬ간을 μ‚­μ œν•œλ‹€. - - [ ] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 노선을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] λ…Έμ„ μ˜ 이름을 μž…λ ₯ν•œλ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 역을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] μ—­μ˜ 이름을 μž…λ ₯ν•œλ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. - - [ ] ν•΄λ‹Ή 노선에 μ‘΄μž¬ν•˜λŠ” 역을 μ‚­μ œν•œλ‹€. - - [ ] `[INFO] ꡬ간이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] ꡬ간을 λ“±λ‘ν•œλ‹€. + - [x] `## 등둝할 λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] ꡬ간을 μΆ”κ°€ν•  λ…Έμ„  이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [x] `## 등둝할 μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] ꡬ간에 μΆ”κ°€ν•  μ—­ 이름을 μž…λ ₯ λ°›λŠ”λ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [x] 역을 μΆ”κ°€ν•  μˆœμ„œλ₯Ό μž…λ ₯λ°›λŠ”λ‹€. + - [x] 숫자 μž…λ ₯이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] μΆ”κ°€ν•  수 μžˆλŠ” ꡬ간 λ²”μœ„λ₯Ό λ„˜μ–΄κ°„ 경우, λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] `[INFO] ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] ꡬ간을 μ‚­μ œν•œλ‹€. + - [x] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 노선을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] λ…Έμ„ μ˜ 이름을 μž…λ ₯ν•œλ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 노선이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [x] `## μ‚­μ œν•  κ΅¬κ°„μ˜ 역을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] μ—­μ˜ 이름을 μž…λ ₯ν•œλ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 역이 μ•„λ‹Œ 경우, λ‹€μ‹œ μž…λ ₯ λ°›λŠ”λ‹€. + - [x] ν•΄λ‹Ή 노선에 μ‘΄μž¬ν•˜λŠ” 역을 μ‚­μ œν•œλ‹€. + - [x] `[INFO] ꡬ간이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. ### μ§€ν•˜μ²  노선도λ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ -- [ ] `## μ§€ν•˜μ²  노선도`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] λ…Έμ„ κ³Ό ν•΄λ‹Ή 노선이 μ§€λ‚˜λŠ” μ—­μ˜ 정보λ₯Ό μ°¨λ‘€λ‘œ 좜λ ₯ν•œλ‹€. +- [x] `## μ§€ν•˜μ²  노선도`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] λ…Έμ„ κ³Ό ν•΄λ‹Ή 노선이 μ§€λ‚˜λŠ” μ—­μ˜ 정보λ₯Ό μ°¨λ‘€λ‘œ 좜λ ₯ν•œλ‹€. diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index ac9202d53..62c00ed63 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -1,16 +1,56 @@ package subway.controller; import java.util.List; +import subway.domain.constants.LineCommand; +import subway.service.RouteService; import subway.service.SubwayService; +import subway.view.LineView; public class LineController { + private final LineView lineView; private final SubwayService subwayService; + private final RouteService routeService; - public LineController(SubwayService subwayService) { + public LineController(LineView lineView, SubwayService subwayService, RouteService routeService) { + this.lineView = lineView; this.subwayService = subwayService; + this.routeService = routeService; + } + + public void run() { + lineView.printFunctions(); + LineCommand function = lineView.enterFunction(); + if (function.equals(LineCommand.ADD)) { + addLine(); + } + if (function.equals(LineCommand.DELETE)) { + deleteLine(); + } + if (function.equals(LineCommand.GET)) { + getLines(); + } } public void addLines(List lines) { subwayService.addAll(lines); } + + private void addLine() { + String name = lineView.enterLineNameToAdd(); + String head = lineView.enterHeadStation(); + String tail = lineView.enterTailStation(); + routeService.addRoute(name, head, tail); + subwayService.add(name); + lineView.printAddResult(); + } + + private void deleteLine() { + String name = lineView.enterLineNameToDelete(); + subwayService.delete(name); + lineView.printDeleteResult(); + } + + private void getLines() { + lineView.printAllLines(subwayService.getAll()); + } } diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java index 5ed304951..add6e2174 100644 --- a/src/main/java/subway/controller/RouteController.java +++ b/src/main/java/subway/controller/RouteController.java @@ -32,8 +32,13 @@ public void run() { } private void addRoute() { + String line = routeView.enterLineNameToAdd(); + String station = routeView.enterStationNameToAdd(); + int index = routeView.enterIndexToAdd(); + routeService.addStation(line, station, index); + routeView.printResult(); } - + private void deleteRoute() { } diff --git a/src/main/java/subway/domain/Route.java b/src/main/java/subway/domain/Route.java index 55cbacba2..ce24bbc89 100644 --- a/src/main/java/subway/domain/Route.java +++ b/src/main/java/subway/domain/Route.java @@ -3,6 +3,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import subway.global.exception.CustomException; +import subway.global.exception.ErrorMessage; public class Route { private Map> route; @@ -15,4 +17,10 @@ public void add(Line line, List stations) { route.put(line, stations); } + public void addStation(Line line, Station station, int index) { + if (route.get(line).isEmpty()) { + throw CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR); + } + route.get(line).set(index, station); + } } diff --git a/src/main/java/subway/global/exception/ErrorMessage.java b/src/main/java/subway/global/exception/ErrorMessage.java index 191106322..d69ac1138 100644 --- a/src/main/java/subway/global/exception/ErrorMessage.java +++ b/src/main/java/subway/global/exception/ErrorMessage.java @@ -14,7 +14,10 @@ public enum ErrorMessage { // Line LINE_DUPLICATED_ERROR("μ€‘λ³΅λœ λ…Έμ„  이름을 μž…λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€."), - LINE_NOT_FOUND_ERROR("μž…λ ₯ν•œ 노선을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); + LINE_NOT_FOUND_ERROR("μž…λ ₯ν•œ 노선을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."), + + // Route + INVALID_INDEX_ERROR("μ˜¬λ°”λ₯Έ μˆœμ„œλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”."); private final String message; diff --git a/src/main/java/subway/global/validator/Validator.java b/src/main/java/subway/global/validator/Validator.java index ba25d63a0..3d3fcba02 100644 --- a/src/main/java/subway/global/validator/Validator.java +++ b/src/main/java/subway/global/validator/Validator.java @@ -9,4 +9,15 @@ public static void validateMinLength(String input, int min) { throw CustomException.from(ErrorMessage.INVALID_LENGTH_ERROR); } } + + public static int validateNumber(String message, ErrorMessage errorMessage) { + if (isNotNumber(message)) { + throw CustomException.from(errorMessage); + } + return Integer.parseInt(message); + } + + public static boolean isNotNumber(String str) { + return !str.matches("\\d+"); + } } diff --git a/src/main/java/subway/service/RouteService.java b/src/main/java/subway/service/RouteService.java index ce7eb6ec8..3d20707ea 100644 --- a/src/main/java/subway/service/RouteService.java +++ b/src/main/java/subway/service/RouteService.java @@ -49,4 +49,12 @@ public void addRoute(String lineName, String headName, String tailName) { .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); route.add(line, List.of(head, tail)); } + + public void addStation(String lineName, String stationName, int index) { + Line line = lineRepository.findByName(lineName) + .orElseThrow(() -> CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR)); + Station station = stationRepository.findByName(stationName) + .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); + route.addStation(line, station, index); + } } diff --git a/src/main/java/subway/view/RouteView.java b/src/main/java/subway/view/RouteView.java index 9d0cf67ac..221b55871 100644 --- a/src/main/java/subway/view/RouteView.java +++ b/src/main/java/subway/view/RouteView.java @@ -1,6 +1,8 @@ package subway.view; import subway.domain.constants.RouteCommand; +import subway.global.exception.ErrorMessage; +import subway.global.validator.Validator; import subway.view.console.ConsoleReader; import subway.view.console.ConsoleWriter; @@ -22,4 +24,26 @@ public RouteCommand enterFunction() { ConsoleWriter.printlnMessage("## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”."); return RouteCommand.from(consoleReader.enterMessage()); } + + public String enterLineNameToAdd() { + ConsoleWriter.printlnMessage("## 노선을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public String enterStationNameToAdd() { + ConsoleWriter.printlnMessage("## 역을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public int enterIndexToAdd() { + ConsoleWriter.printlnMessage("## μˆœμ„œλ₯Ό μž…λ ₯ν•˜μ„Έμš”."); + return Validator.validateNumber( + consoleReader.enterMessage(), + ErrorMessage.INVALID_INDEX_ERROR + ); + } + + public void printResult() { + ConsoleWriter.printlnMessage("[INFO] ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } } From d623f946d185b31b55dd57443eee29bb030771e0 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Thu, 14 Dec 2023 00:02:57 +0900 Subject: [PATCH 23/26] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- src/main/java/subway/controller/RouteController.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index cca618f35..ebdb6fb2b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -66,9 +66,9 @@ - [x] μ €μž₯된 역이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - [x] λ…Έμ„  이름을 μ €μž₯ν•œλ‹€. - [x] `[INFO] μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. -- [ ] 노선을 μ‘°νšŒν•œλ‹€. - - [ ] `## λ…Έμ„  λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] μ €μž₯된 λ…Έμ„ μ˜ 이름 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. +- [x] 노선을 μ‘°νšŒν•œλ‹€. + - [x] `## λ…Έμ„  λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] μ €μž₯된 λ…Έμ„ μ˜ 이름 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. - [ ] 노선을 μ‚­μ œν•œλ‹€. - [ ] `## μ‚­μ œν•  λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - [ ] λ…Έμ„  이름을 μž…λ ₯λ°›λŠ”λ‹€. diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java index add6e2174..dd27314f2 100644 --- a/src/main/java/subway/controller/RouteController.java +++ b/src/main/java/subway/controller/RouteController.java @@ -39,7 +39,17 @@ private void addRoute() { routeView.printResult(); } + /** + * ꡬ간을 μ‚­μ œν•˜λŠ” ν•¨μˆ˜ + */ private void deleteRoute() { } + + /** + * μ§€ν•˜μ²  노선도λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜ + */ + public void print() { + routeView.print + } } From 8653192de5bcd03256e7a7b9250e9d8a89815407 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Thu, 14 Dec 2023 00:04:03 +0900 Subject: [PATCH 24/26] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index ebdb6fb2b..f9bd7d6f7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -69,13 +69,13 @@ - [x] 노선을 μ‘°νšŒν•œλ‹€. - [x] `## λ…Έμ„  λͺ©λ‘`λ₯Ό 좜λ ₯ν•œλ‹€. - [x] μ €μž₯된 λ…Έμ„ μ˜ 이름 내역을 λΆˆλŸ¬μ™€ 좜λ ₯ν•œλ‹€. -- [ ] 노선을 μ‚­μ œν•œλ‹€. - - [ ] `## μ‚­μ œν•  λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. - - [ ] λ…Έμ„  이름을 μž…λ ₯λ°›λŠ”λ‹€. - - [ ] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. - - [ ] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. - - [ ] μž…λ ₯된 노선을 μ‚­μ œν•œλ‹€. - - [ ] `[INFO] μ§€ν•˜μ²  노선이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. +- [x] 노선을 μ‚­μ œν•œλ‹€. + - [x] `## μ‚­μ œν•  λ…Έμ„  이름을 μž…λ ₯ν•˜μ„Έμš”.`λ₯Ό 좜λ ₯ν•œλ‹€. + - [x] λ…Έμ„  이름을 μž…λ ₯λ°›λŠ”λ‹€. + - [x] 빈 λ¬Έμžμ—΄μ΄ μ•„λ‹˜μ„ κ²€μ¦ν•œλ‹€. + - [x] μ‘΄μž¬ν•˜λŠ” 이름이 μ•„λ‹Œ 경우 λ‹€μ‹œ μž…λ ₯λ°›λŠ”λ‹€. + - [x] μž…λ ₯된 노선을 μ‚­μ œν•œλ‹€. + - [x] `[INFO] μ§€ν•˜μ²  노선이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`λ₯Ό 좜λ ₯ν•œλ‹€. ### ꡬ간을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ From 9c176f909019b756594d7e924ad70b0fc19d71e5 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Thu, 14 Dec 2023 00:23:16 +0900 Subject: [PATCH 25/26] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/RouteController.java | 7 +++++-- src/main/java/subway/domain/Route.java | 13 +++++++++++++ src/main/java/subway/service/RouteService.java | 8 ++++++++ src/main/java/subway/view/LineView.java | 1 - src/main/java/subway/view/RouteView.java | 16 +++++++++++++++- 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java index dd27314f2..7a06db7fe 100644 --- a/src/main/java/subway/controller/RouteController.java +++ b/src/main/java/subway/controller/RouteController.java @@ -36,14 +36,17 @@ private void addRoute() { String station = routeView.enterStationNameToAdd(); int index = routeView.enterIndexToAdd(); routeService.addStation(line, station, index); - routeView.printResult(); + routeView.printAddResult(); } /** * ꡬ간을 μ‚­μ œν•˜λŠ” ν•¨μˆ˜ */ private void deleteRoute() { - + String line = routeView.enterLineNameToDelete(); + String station = routeView.enterStationNameToDelete(); + routeService.deleteStation(line, station); + routeView.printDeleteResult(); } /** diff --git a/src/main/java/subway/domain/Route.java b/src/main/java/subway/domain/Route.java index ce24bbc89..cb9168de5 100644 --- a/src/main/java/subway/domain/Route.java +++ b/src/main/java/subway/domain/Route.java @@ -23,4 +23,17 @@ public void addStation(Line line, Station station, int index) { } route.get(line).set(index, station); } + + public void deleteStation(Line line, Station target) { + List stations = route.get(line); + Station station = findByName(stations, target.getName()); + stations.remove(station); + } + + private Station findByName(List stations, String target) { + return stations.stream() + .filter(station -> station.getName().equals(target)) + .findFirst() + .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); + } } diff --git a/src/main/java/subway/service/RouteService.java b/src/main/java/subway/service/RouteService.java index 3d20707ea..520c9e40c 100644 --- a/src/main/java/subway/service/RouteService.java +++ b/src/main/java/subway/service/RouteService.java @@ -57,4 +57,12 @@ public void addStation(String lineName, String stationName, int index) { .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); route.addStation(line, station, index); } + + public void deleteStation(String lineName, String stationName) { + Line line = lineRepository.findByName(lineName) + .orElseThrow(() -> CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR)); + Station station = stationRepository.findByName(stationName) + .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); + route. + } } diff --git a/src/main/java/subway/view/LineView.java b/src/main/java/subway/view/LineView.java index 1b6e91d32..6c25d426a 100644 --- a/src/main/java/subway/view/LineView.java +++ b/src/main/java/subway/view/LineView.java @@ -60,5 +60,4 @@ public String enterTailStation() { ConsoleWriter.printlnMessage("## 등둝할 λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”."); return consoleReader.enterMessage(); } - } diff --git a/src/main/java/subway/view/RouteView.java b/src/main/java/subway/view/RouteView.java index 221b55871..b4d499a97 100644 --- a/src/main/java/subway/view/RouteView.java +++ b/src/main/java/subway/view/RouteView.java @@ -43,7 +43,21 @@ public int enterIndexToAdd() { ); } - public void printResult() { + public String enterLineNameToDelete() { + ConsoleWriter.printlnMessage("## μ‚­μ œν•  κ΅¬κ°„μ˜ 노선을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public String enterStationNameToDelete() { + ConsoleWriter.printlnMessage("## μ‚­μ œν•  κ΅¬κ°„μ˜ 역을 μž…λ ₯ν•˜μ„Έμš”."); + return consoleReader.enterMessage(); + } + + public void printAddResult() { ConsoleWriter.printlnMessage("[INFO] ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); } + + public void printDeleteResult() { + ConsoleWriter.printlnMessage("[INFO] ꡬ간이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); + } } From e0111ed6b32501c52b15e737e25cae89144ef1e3 Mon Sep 17 00:00:00 2001 From: MingyeomKim Date: Thu, 14 Dec 2023 00:24:55 +0900 Subject: [PATCH 26/26] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/RouteController.java | 7 ------- src/main/java/subway/service/RouteService.java | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/subway/controller/RouteController.java b/src/main/java/subway/controller/RouteController.java index 7a06db7fe..c823fb109 100644 --- a/src/main/java/subway/controller/RouteController.java +++ b/src/main/java/subway/controller/RouteController.java @@ -48,11 +48,4 @@ private void deleteRoute() { routeService.deleteStation(line, station); routeView.printDeleteResult(); } - - /** - * μ§€ν•˜μ²  노선도λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜ - */ - public void print() { - routeView.print - } } diff --git a/src/main/java/subway/service/RouteService.java b/src/main/java/subway/service/RouteService.java index 520c9e40c..2eded5034 100644 --- a/src/main/java/subway/service/RouteService.java +++ b/src/main/java/subway/service/RouteService.java @@ -63,6 +63,6 @@ public void deleteStation(String lineName, String stationName) { .orElseThrow(() -> CustomException.from(ErrorMessage.LINE_NOT_FOUND_ERROR)); Station station = stationRepository.findByName(stationName) .orElseThrow(() -> CustomException.from(ErrorMessage.STATION_NOT_FOUND_ERROR)); - route. + route.deleteStation(line, station); } }