Skip to content

[4기 - 유원우] SpringBoot Part3 Weekly Mission 제출합니다. #864

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 37 commits into
base: wonu606
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9baf7a7
rename: 디렉토리 구조 및 파일명 변경
wonu606 Jul 18, 2023
349c07b
refactor: console 패키지 구조 및 controller만 의존하도록 변경
wonu606 Jul 18, 2023
aa93ae3
refactor: CustomerController 계층 도메인 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
f10d371
refactor: voucher controller 도메인 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
54f1e71
fix: console과 controller 사이의 오류 수정
wonu606 Jul 18, 2023
531bfed
refactor: CustomerService 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
d718d9a
refactor: VoucherService 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
a9001be
refactor: VoucherWalletService 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
fdd9bc2
refactor: WalletRepository 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
043ffff
refactor: VoucherRepository 의존성 제거 및 DTO 구현
wonu606 Jul 18, 2023
07219aa
refactor: VOucherWallet에서 DTO의 Converters 구현
wonu606 Jul 18, 2023
42ed6d5
refactor: VoucherService에서 DTO Converters 구현
wonu606 Jul 18, 2023
300a8a0
refactor: VoucherController에서 DTO Converters 구현
wonu606 Jul 18, 2023
f96ca81
refactor: CustomerRepository 의존성 제거 및 DTO 구현
wonu606 Jul 19, 2023
fb0c5f6
refactor: CustomerService에서 DTO Converters 구현
wonu606 Jul 19, 2023
8f6e04e
feat: CustomerController의 DTO Converters 구현
wonu606 Jul 19, 2023
66b3d0e
reafactor: CustomerController에서 CustomerControllerConverterManager를 통…
wonu606 Jul 19, 2023
b88c12e
refactor: VoucherController에서 ConverterManager를 통해 convert하도록 변경
wonu606 Jul 19, 2023
487107c
refactor: CustomerService에서 ConverterManager를 통해 convert하도록 변경
wonu606 Jul 19, 2023
4b8dba0
refactor: VoucherService에서 ConverterManager를 통해 Convert하도록 변경
wonu606 Jul 19, 2023
bd3435d
refactor: VoucherWalletService에서 ConvertManager를 통해 Convert하도록 변경
wonu606 Jul 20, 2023
a5b581d
refactor(CustomerRepository): reader와 store를 통해 함수 실행 구현
wonu606 Jul 20, 2023
33687d2
refactor(VoucherRepository): reader와 store를 통해 함수 실행 구현
wonu606 Jul 20, 2023
1f20c70
refactor(VoucherWalletRepository): reader와 store를 통해 함수 실행 구현
wonu606 Jul 20, 2023
933ebfc
refactor: Reader에서 RowMapperManager를 통해 RowMapper를 가져오도록 변경
wonu606 Jul 20, 2023
508bcd8
feat: CustomerController에서 값을 String으로만 반환하도록 변경
wonu606 Jul 20, 2023
ad1fbd5
feat: VoucherController에서 값을 String으로만 반환하도록 변경
wonu606 Jul 20, 2023
35f7d76
refactor: Voucher -> VoucherWallet을 의존하는 방향을 VoucherWallet -> Vouchce…
wonu606 Jul 20, 2023
f237521
feat: Customer를 Wallet에 등록하는 기능 구현
wonu606 Jul 23, 2023
aec5b0f
feat(Controller): Customer ViewController & RestController 구현
wonu606 Jul 24, 2023
e74675b
feat(Controller): Voucher ViewController & RestController 구현
wonu606 Jul 24, 2023
0ba3a94
test: Repository 테스트 코드 구현 및 통과
wonu606 Jul 25, 2023
c396423
test: Service 계층 테스트 코드 작성 및 통과
wonu606 Jul 25, 2023
dce3e35
chore: 코드 정렬
wonu606 Jul 25, 2023
1bca3e7
doc: 이전 흐름도 제거
wonu606 Jul 25, 2023
dd7c31c
chore: 데이터베이스 정보 환경 변수를 통해 받도록 변경
wonu606 Jul 25, 2023
e0bee58
refactor: customer 페이지 bootstrap 적용
wonu606 Jul 25, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions voucher-manager/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ repositories {

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.beryx:text-io:3.4.1'
testImplementation 'org.assertj:assertj-core:3.24.2'
Expand Down
Binary file removed voucher-manager/doc/흐름도.png
Binary file not shown.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.wonu606.vouchermanager.io;
package com.wonu606.vouchermanager.console;

import com.wonu606.vouchermanager.menu.VoucherMenu;

public abstract class AbstractConsoleIO {
public abstract class AbstractConsoleIo {

protected final ConsoleInput input;
protected final ConsolePrinter printer;

public AbstractConsoleIO(ConsoleInput input, ConsolePrinter printer) {
public AbstractConsoleIo(ConsoleInput input, ConsolePrinter printer) {
this.input = input;
this.printer = printer;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wonu606.vouchermanager.io;
package com.wonu606.vouchermanager.console;

import java.util.List;
import org.beryx.textio.TextIO;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wonu606.vouchermanager.io;
package com.wonu606.vouchermanager.console;

import org.beryx.textio.TextIoFactory;
import org.beryx.textio.TextTerminal;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.wonu606.vouchermanager.console;

import com.wonu606.vouchermanager.console.cableadapter.FrontCableAdapter;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class VoucherManagerCommandLineRunner implements CommandLineRunner {
private final FrontCableAdapter frontCableAdapter;

public VoucherManagerCommandLineRunner(FrontCableAdapter frontCableAdapter) {
this.frontCableAdapter = frontCableAdapter;
}

@Override
public void run(String... args) {
frontCableAdapter.run();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wonu606.vouchermanager.menu;
package com.wonu606.vouchermanager.console.cableadapter;

import java.util.Arrays;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.wonu606.vouchermanager.console.cableadapter;

import com.wonu606.vouchermanager.console.controllercable.customer.CustomerControllerCable;
import com.wonu606.vouchermanager.console.controllercable.voucher.VoucherControllerCable;
import org.springframework.stereotype.Component;

@Component
public class FrontCableAdapter {

private final CustomerControllerCable customerControllerCable;
private final VoucherControllerCable voucherControllerCable;
private final FrontConsoleIo consoleIo;

public FrontCableAdapter(CustomerControllerCable customerControllerCable,
VoucherControllerCable voucherControllerCable, FrontConsoleIo consoleIo) {
this.customerControllerCable = customerControllerCable;
this.voucherControllerCable = voucherControllerCable;
this.consoleIo = consoleIo;
}

public void run() {
ConsoleMenu menu = ConsoleMenu.START;
while (menu.isNotExit()) {
try {
menu = consoleIo.selectMenu();
executeMenuAction(menu);
} catch (Exception exception) {
consoleIo.displayMessage(exception.getMessage());
}
}
terminal();
}

private void executeMenuAction(ConsoleMenu menu) {
switch (menu) {
case EXIT:
return;
case CUSTOMER:
customerControllerCable.run();
return;
case VOUCHER:
voucherControllerCable.run();
return;

default:
throw new IllegalArgumentException("수행할 수 없는 메뉴입니다.");
}
}

private void terminal() {
consoleIo.displayMessage("곧 프로그램을 종료합니다.");
try {
Thread.sleep(3000);
} catch (InterruptedException ignored) {
}
consoleIo.terminal();
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.wonu606.vouchermanager.io;
package com.wonu606.vouchermanager.console.cableadapter;

import com.wonu606.vouchermanager.menu.ConsoleMenu;
import com.wonu606.vouchermanager.console.AbstractConsoleIo;
import com.wonu606.vouchermanager.console.ConsoleInput;
import com.wonu606.vouchermanager.console.ConsolePrinter;
import org.springframework.stereotype.Component;

@Component
public class FrontConsoleIO extends AbstractConsoleIO {
public class FrontConsoleIo extends AbstractConsoleIo {

public FrontConsoleIO(ConsoleInput input, ConsolePrinter printer) {
public FrontConsoleIo(ConsoleInput input, ConsolePrinter printer) {
super(input, printer);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.wonu606.vouchermanager.console.controllercable.customer;

import com.wonu606.vouchermanager.console.controllercable.customer.io.CustomerConsoleIo;
import com.wonu606.vouchermanager.controller.customer.CustomerController;
import com.wonu606.vouchermanager.controller.customer.request.CustomerCreateRequest;
import com.wonu606.vouchermanager.controller.customer.request.OwnedVouchersRequest;
import com.wonu606.vouchermanager.controller.customer.request.WalletDeleteRequest;
import org.springframework.stereotype.Component;

@Component
public class CustomerControllerCable {

private final CustomerConsoleIo consoleIo;
private final CustomerController controller;

public CustomerControllerCable(CustomerConsoleIo consoleIo,
CustomerController controller) {
this.consoleIo = consoleIo;
this.controller = controller;
}

public void run() {
CustomerControllerMenu menu = CustomerControllerMenu.START;
while (menu.isNotExit()) {
try {
menu = consoleIo.selectMenu();
executeMenuAction(menu);
} catch (Exception exception) {
consoleIo.displayMessage(exception.getMessage());
}
}
}

private void executeMenuAction(CustomerControllerMenu menu) {
switch (menu) {
case EXIT:
return;
case CREATE:
CustomerCreateRequest customerCreateRequest = createCustomerCreateRequest();
controller.createCustomer(customerCreateRequest);
return;

case LIST:
String customerListResponse = controller.getCustomerList();
consoleIo.displayCustomerList(customerListResponse);
return;

case VOUCHER_LIST:
String searchedCustomerId = consoleIo.readString("CustomerId");
String ownedVoucherResponse = controller.getOwnedVouchersByCustomer(
new OwnedVouchersRequest(searchedCustomerId));
consoleIo.displayVoucherList(ownedVoucherResponse);
return;

case DELETE:
String deletionCustomerId = consoleIo.readString(
"CustomerId To be Deleted");
String deletionVoucherId = consoleIo.readString(
"VoucherId To be Deleted"
);
controller.deleteWallet(
new WalletDeleteRequest(deletionVoucherId, deletionCustomerId));
return;

default:
throw new IllegalArgumentException("수행할 수 없는 메뉴입니다.");
}
}

private CustomerCreateRequest createCustomerCreateRequest() {
String creationEmail = consoleIo.readString("Email");
String creationNickName = consoleIo.readString("Nickname");
return new CustomerCreateRequest(creationEmail, creationNickName);
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package com.wonu606.vouchermanager.menu;
package com.wonu606.vouchermanager.console.controllercable.customer;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public enum CustomerMenu {
public enum CustomerControllerMenu {
START,
EXIT,
CREATE,
LIST,
VOUCHER_LIST,
DELETE;

public static CustomerMenu getTypeByName(String name) {
public static CustomerControllerMenu getTypeByName(String name) {
return Arrays.stream(values())
.filter(c -> Objects.equals(c.name(), name.toUpperCase()))
.findFirst()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.wonu606.vouchermanager.console.controllercable.customer.io;

import com.wonu606.vouchermanager.console.AbstractConsoleIo;
import com.wonu606.vouchermanager.console.ConsoleInput;
import com.wonu606.vouchermanager.console.ConsolePrinter;
import com.wonu606.vouchermanager.console.controllercable.customer.CustomerControllerMenu;
import org.springframework.stereotype.Component;

@Component
public class CustomerConsoleIo extends AbstractConsoleIo {

public CustomerConsoleIo(ConsoleInput input, ConsolePrinter printer) {
super(input, printer);
}

@Override
public CustomerControllerMenu selectMenu() {
displayMenu();
String menuSelection = input.readString(CustomerControllerMenu.getAllNames(), "Menu");
return CustomerControllerMenu.getTypeByName(menuSelection);
}

protected void displayMenu() {
String lineFormat = "Type %s to %s the program.\n";
CustomerControllerMenu.getAllNames().forEach(n ->
printer.displayMessage(String.format(lineFormat, n, n)));
}

public void displayCustomerList(String response) {
printer.displayMessage("=== 보유한 Customer 리스트 ===");
printer.displayMessage(response);
}

public void displayVoucherList(String response) {
printer.displayMessage("=== 보유한 바우처 리스트 ===");
printer.displayMessage(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.wonu606.vouchermanager.console.controllercable.voucher;

import com.wonu606.vouchermanager.console.controllercable.voucher.io.VoucherConsoleIo;
import com.wonu606.vouchermanager.controller.voucherwallet.VoucherWalletController;
import com.wonu606.vouchermanager.controller.voucherwallet.reqeust.VoucherCreateRequest;
import com.wonu606.vouchermanager.controller.voucherwallet.reqeust.OwnedCustomersRequest;
import com.wonu606.vouchermanager.controller.voucherwallet.reqeust.WalletAssignRequest;
import org.springframework.stereotype.Component;

@Component
public class VoucherControllerCable {

private final VoucherConsoleIo consoleIo;
private final VoucherWalletController controller;

public VoucherControllerCable(VoucherConsoleIo consoleIo,
VoucherWalletController controller) {
this.consoleIo = consoleIo;
this.controller = controller;
}

public void run() {
VoucherControllerMenu menu = VoucherControllerMenu.START;
while (menu.isNotExit()) {
try {
menu = consoleIo.selectMenu();
executeMenuAction(menu);
} catch (Exception exception) {
consoleIo.displayMessage(exception.getMessage());
}
}
}

private void executeMenuAction(VoucherControllerMenu menu) {
switch (menu) {
case EXIT:
return;

case LIST:
String voucherResponse = controller.getVoucherList();
consoleIo.displayVoucherList(voucherResponse);
return;

case CREATE:
VoucherCreateRequest voucherCreateRequest = createVoucherCreateRequest();
controller.createVoucher(voucherCreateRequest);
return;
case ASSIGN:
WalletAssignRequest voucherWalletCreateRequest = createVoucherWalletCreateRequest();
controller.assignWallet(voucherWalletCreateRequest);
return;

case CUSTOMER_LIST:
String voucherId = consoleIo.readString("VoucherId");
String ownedCustomerResponse = controller.getOwnedCustomersByVoucher(
new OwnedCustomersRequest(voucherId));
consoleIo.displayCustomerList(ownedCustomerResponse);
return;

default:
throw new IllegalArgumentException("수행할 수 없는 메뉴입니다.");
}
}

private WalletAssignRequest createVoucherWalletCreateRequest() {
String uuid = consoleIo.readString("Voucher UUID");
return new WalletAssignRequest(uuid);
}

private VoucherCreateRequest createVoucherCreateRequest() {
String type = consoleIo.selectVoucherType();
double discountValue = consoleIo.readDouble("discount");
return new VoucherCreateRequest(type, discountValue);
}
}
Loading