diff --git a/build.gradle b/build.gradle index c3f15188b9..605973b5d0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'mysql:mysql-connector-java:8.0.33' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'com.h2database:h2' diff --git a/src/main/java/org/prgms/kdtspringweek1/AppCommandLineRunner.java b/src/main/java/org/prgms/kdtspringweek1/AppCommandLineRunner.java index be266594a2..a34c81f9f9 100644 --- a/src/main/java/org/prgms/kdtspringweek1/AppCommandLineRunner.java +++ b/src/main/java/org/prgms/kdtspringweek1/AppCommandLineRunner.java @@ -1,7 +1,7 @@ package org.prgms.kdtspringweek1; -import org.prgms.kdtspringweek1.controller.AppController; -import org.prgms.kdtspringweek1.exception.FileExceptionCode; +import org.prgms.kdtspringweek1.controller.consoleController.AppController; +import org.prgms.kdtspringweek1.exception.ExitException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; @@ -9,12 +9,12 @@ import org.springframework.stereotype.Component; @Component -@Profile("!test") +@Profile({"console"}) public class AppCommandLineRunner implements CommandLineRunner { - private final AppController appController; private boolean shouldExit = false; - private final static Logger logger = LoggerFactory.getLogger(AppCommandLineRunner.class); + private final AppController appController; + private static final Logger logger = LoggerFactory.getLogger(AppCommandLineRunner.class); public AppCommandLineRunner(AppController appController) { this.appController = appController; @@ -22,16 +22,14 @@ public AppCommandLineRunner(AppController appController) { @Override public void run(String... args) { - while(!shouldExit){ + while (!shouldExit) { try { appController.startVoucherProgram(); - } catch(Exception exception){ + } catch (ExitException exception) { + // 시스템이 종료되어야하는 예외를 구분하여 처리 System.out.println(exception.getMessage()); logger.error(exception.getMessage()); - // 파일에서 정보를 읽어오는 것을 실패했다면, 서버가 켜지지 않는게 정상이므로, 예외 전파 후 어플을 종료 시키도록 한다. - if(exception.getMessage().equals(FileExceptionCode.FAIL_TO_READ_DATA_FROM_CSV)){ - shouldExit = true; - } + shouldExit = true; } } } diff --git a/src/main/java/org/prgms/kdtspringweek1/JdbcUtils.java b/src/main/java/org/prgms/kdtspringweek1/UUIDUtils.java similarity index 75% rename from src/main/java/org/prgms/kdtspringweek1/JdbcUtils.java rename to src/main/java/org/prgms/kdtspringweek1/UUIDUtils.java index 04259acdca..4d85ea13d9 100644 --- a/src/main/java/org/prgms/kdtspringweek1/JdbcUtils.java +++ b/src/main/java/org/prgms/kdtspringweek1/UUIDUtils.java @@ -1,11 +1,9 @@ package org.prgms.kdtspringweek1; import java.nio.ByteBuffer; -import java.sql.Timestamp; -import java.time.LocalDateTime; import java.util.UUID; -public class JdbcUtils { +public class UUIDUtils { public static UUID toUUID(byte[] bytes) { var byteBuffer = ByteBuffer.wrap(bytes); diff --git a/src/main/java/org/prgms/kdtspringweek1/console/ConsoleOutput.java b/src/main/java/org/prgms/kdtspringweek1/console/ConsoleOutput.java index 4102735399..ce22ea8a30 100644 --- a/src/main/java/org/prgms/kdtspringweek1/console/ConsoleOutput.java +++ b/src/main/java/org/prgms/kdtspringweek1/console/ConsoleOutput.java @@ -40,9 +40,9 @@ public void printExitMessage() { public void printVouchersToSelect() { System.out.println(""" -------------------------------------------------- - voucher 종류를 선택하여 정수로 입력해주세요. - 1. FixedAmountVoucher - 2. PercentDiscountVoucher""" + voucher 종류를 선택하여 문자열로 입력해주세요. + 1. fixed amount voucher + 2. percent discount voucher""" ); } diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/AppController.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/AppController.java similarity index 93% rename from src/main/java/org/prgms/kdtspringweek1/controller/AppController.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/AppController.java index db9d7bac0f..0f3d6c087a 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/AppController.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/AppController.java @@ -1,7 +1,7 @@ -package org.prgms.kdtspringweek1.controller; +package org.prgms.kdtspringweek1.controller.consoleController; import org.prgms.kdtspringweek1.console.ConsoleOutput; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; import org.springframework.stereotype.Component; // 뷰 영역(console 패키지)에 컨트롤러가 포함되어 있어, 따로 빼주었습니다. diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverter.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/ConsoleInputConverter.java similarity index 79% rename from src/main/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverter.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/ConsoleInputConverter.java index ff7dd283ff..1be12f003f 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverter.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/ConsoleInputConverter.java @@ -1,8 +1,7 @@ -package org.prgms.kdtspringweek1.controller; +package org.prgms.kdtspringweek1.controller.consoleController; import org.prgms.kdtspringweek1.console.ConsoleInput; -import org.prgms.kdtspringweek1.voucher.service.dto.CreateVoucherRequestDto; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; import org.prgms.kdtspringweek1.voucher.service.dto.SelectVoucherTypeDto; import org.prgms.kdtspringweek1.voucher.service.dto.UpdateVoucherRequestDto; import org.prgms.kdtspringweek1.voucher.entity.VoucherType; @@ -27,8 +26,12 @@ public VoucherType getVoucherType() { return SelectVoucherTypeDto.getVoucherTypeByNum(Long.parseLong(consoleInput.getInput())); } - public CreateVoucherRequestDto getCreateVoucherRequestDto() { - return new CreateVoucherRequestDto(Long.parseLong(consoleInput.getInput())); + public String getVoucherTypeString() { + return consoleInput.getInput(); + } + + public long getDiscountValue() { + return Long.parseLong(consoleInput.getInput()); } public UUID getId() { diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/CustomerController.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/CustomerController.java similarity index 95% rename from src/main/java/org/prgms/kdtspringweek1/controller/CustomerController.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/CustomerController.java index 2423cb5584..cd99a5cc6a 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/CustomerController.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/CustomerController.java @@ -1,7 +1,7 @@ -package org.prgms.kdtspringweek1.controller; +package org.prgms.kdtspringweek1.controller.consoleController; import org.prgms.kdtspringweek1.console.ConsoleOutput; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; import org.prgms.kdtspringweek1.customer.service.dto.FindCustomerResponseDto; import org.prgms.kdtspringweek1.customer.service.dto.UpdateCustomerRequestDto; import org.prgms.kdtspringweek1.customer.entity.Customer; diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/VoucherController.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/VoucherController.java similarity index 82% rename from src/main/java/org/prgms/kdtspringweek1/controller/VoucherController.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/VoucherController.java index 5b1acf2057..f7603e6414 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/VoucherController.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/VoucherController.java @@ -1,7 +1,8 @@ -package org.prgms.kdtspringweek1.controller; +package org.prgms.kdtspringweek1.controller.consoleController; import org.prgms.kdtspringweek1.console.ConsoleOutput; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.voucher.service.dto.CreateVoucherRequestDto; import org.prgms.kdtspringweek1.voucher.service.dto.FindVoucherResponseDto; import org.prgms.kdtspringweek1.voucher.service.VoucherService; import org.springframework.stereotype.Component; @@ -33,16 +34,10 @@ public void selectVoucherFunction(SelectFunctionTypeDto functionTypeDto) { private void createVoucher() { consoleOutput.printVouchersToSelect(); - switch (consoleInputConverter.getVoucherType()) { - case FIXED_AMOUNT -> { - consoleOutput.printRequestMessageforDiscountValue(); - voucherService.registerVoucher(consoleInputConverter.getCreateVoucherRequestDto().toFixedAmountVoucher()); - } - case PERCENT_DISCOUNT -> { - consoleOutput.printRequestMessageforDiscountValue(); - voucherService.registerVoucher(consoleInputConverter.getCreateVoucherRequestDto().toPercentDiscountVoucher()); - } - } + String voucherType = consoleInputConverter.getVoucherTypeString(); + consoleOutput.printRequestMessageforDiscountValue(); + long discountValue = consoleInputConverter.getDiscountValue(); + voucherService.registerVoucher(new CreateVoucherRequestDto(discountValue, voucherType).toVoucher()); consoleOutput.printSuccessToCreate(); } diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/WalletController.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/WalletController.java similarity index 94% rename from src/main/java/org/prgms/kdtspringweek1/controller/WalletController.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/WalletController.java index faef2edf0b..e600a30037 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/WalletController.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/WalletController.java @@ -1,7 +1,7 @@ -package org.prgms.kdtspringweek1.controller; +package org.prgms.kdtspringweek1.controller.consoleController; import org.prgms.kdtspringweek1.console.ConsoleOutput; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; import org.prgms.kdtspringweek1.customer.service.dto.FindCustomerResponseDto; import org.prgms.kdtspringweek1.voucher.service.dto.FindVoucherResponseDto; import org.prgms.kdtspringweek1.wallet.entity.Wallet; diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/dto/SelectFunctionTypeDto.java b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/dto/SelectFunctionTypeDto.java similarity index 93% rename from src/main/java/org/prgms/kdtspringweek1/controller/dto/SelectFunctionTypeDto.java rename to src/main/java/org/prgms/kdtspringweek1/controller/consoleController/dto/SelectFunctionTypeDto.java index 6a29190de0..49d98dcb2e 100644 --- a/src/main/java/org/prgms/kdtspringweek1/controller/dto/SelectFunctionTypeDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/controller/consoleController/dto/SelectFunctionTypeDto.java @@ -1,4 +1,4 @@ -package org.prgms.kdtspringweek1.controller.dto; +package org.prgms.kdtspringweek1.controller.consoleController.dto; import org.prgms.kdtspringweek1.exception.InputExceptionCode; import org.slf4j.Logger; @@ -26,7 +26,7 @@ public enum SelectFunctionTypeDto { private String type; private String name; - private final static Logger logger = LoggerFactory.getLogger(SelectFunctionTypeDto.class); + private static final Logger logger = LoggerFactory.getLogger(SelectFunctionTypeDto.class); SelectFunctionTypeDto(String type, String name) { this.type = type; diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/restController/RestVoucherController.java b/src/main/java/org/prgms/kdtspringweek1/controller/restController/RestVoucherController.java new file mode 100644 index 0000000000..873cb1e49f --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/controller/restController/RestVoucherController.java @@ -0,0 +1,48 @@ +package org.prgms.kdtspringweek1.controller.restController; + +import org.prgms.kdtspringweek1.voucher.service.VoucherService; +import org.prgms.kdtspringweek1.voucher.service.dto.CreateVoucherRequestDto; +import org.prgms.kdtspringweek1.voucher.service.dto.FindVoucherResponseDto; +import org.prgms.kdtspringweek1.voucher.service.dto.SelectVoucherTypeDto; +import org.springframework.context.annotation.Profile; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("rest") +@Profile({"rest"}) +public class RestVoucherController { + + private final VoucherService voucherService; + + public RestVoucherController(VoucherService voucherService) { + this.voucherService = voucherService; + } + + @GetMapping("/vouchers") + public List getAllVouchers() { + return voucherService.searchAllVouchers(); + } + + @GetMapping("/vouchers/type") + public List getVoucherByVoucherType(@RequestParam String num) { + return voucherService.searchVouchersByVoucherType(SelectVoucherTypeDto.getVoucherTypeByNum(Long.parseLong(num)).getName()); + } + + @GetMapping("/voucher") + public FindVoucherResponseDto getVoucherByVoucherId(@RequestParam String id) { + return voucherService.searchVoucherById(UUID.fromString(id)).get(); + } + + @PostMapping("/voucher") + public void createVoucher(@RequestBody CreateVoucherRequestDto createVoucherRequestDto) { + voucherService.registerVoucher(createVoucherRequestDto.toVoucher()); + } + + @DeleteMapping("/voucher") + public void deleteVoucher(@RequestParam String id) { + voucherService.deleteVoucherById(UUID.fromString(id)); + } +} \ No newline at end of file diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafVoucherController.java b/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafVoucherController.java new file mode 100644 index 0000000000..00a7f31ce7 --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafVoucherController.java @@ -0,0 +1,68 @@ +package org.prgms.kdtspringweek1.controller.thymeleafController; + +import org.prgms.kdtspringweek1.voucher.service.VoucherService; +import org.prgms.kdtspringweek1.voucher.service.dto.CreateVoucherRequestDto; +import org.prgms.kdtspringweek1.voucher.service.dto.FindVoucherResponseDto; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +@Controller +@RequestMapping("thymeleaf") +@Profile({"thymeleaf"}) +public class ThymeleafVoucherController { + + private final VoucherService voucherService; + + public ThymeleafVoucherController(VoucherService voucherService) { + this.voucherService = voucherService; + } + + @GetMapping("/vouchers") + public String listVouchers(Model model) { + List vouchers = voucherService.searchAllVouchers(); + model.addAttribute("serverTime", LocalDateTime.now()); + model.addAttribute("vouchers", vouchers); + return "voucher/voucher-list"; + } + + @PostMapping("/voucher") + public String createVoucher(@ModelAttribute CreateVoucherRequestDto createVoucherRequestDto) { + voucherService.registerVoucher(createVoucherRequestDto.toVoucher()); + return "voucher/voucher-create"; + } + + @PostMapping("/voucher-delete") + public String deleteVoucher(@RequestParam String voucherId) { + voucherService.deleteVoucherById(UUID.fromString(voucherId)); + return "voucher/voucher-delete"; + } + + @GetMapping("/voucher") + public String searchVoucher(@RequestParam String voucherId, Model model) { + FindVoucherResponseDto voucher = voucherService.searchVoucherById(UUID.fromString(voucherId)).get(); + model.addAttribute("voucher", voucher); + return "voucher/voucher-search"; + } + + @GetMapping("/voucher-create") + public String createVoucher() { + return "voucher/voucher-create"; + } + + @GetMapping("/voucher-delete") + public String deleteVoucher() { + return "voucher/voucher-delete"; + } + + @GetMapping("/voucher-search") + public String searchVoucher() { + return "voucher/voucher-search"; + } + +} \ No newline at end of file diff --git a/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafWalletController.java b/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafWalletController.java new file mode 100644 index 0000000000..50938bcdd1 --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/controller/thymeleafController/ThymeleafWalletController.java @@ -0,0 +1,69 @@ +package org.prgms.kdtspringweek1.controller.thymeleafController; + +import org.prgms.kdtspringweek1.customer.service.dto.FindCustomerResponseDto; +import org.prgms.kdtspringweek1.voucher.service.dto.FindVoucherResponseDto; +import org.prgms.kdtspringweek1.wallet.service.WalletService; +import org.prgms.kdtspringweek1.wallet.service.dto.CreateWalletRequestDto; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +@Controller +@RequestMapping("thymeleaf") +@Profile({"thymeleaf"}) +public class ThymeleafWalletController { + + private final WalletService walletService; + + public ThymeleafWalletController(WalletService walletService) { + this.walletService = walletService; + } + + @PostMapping("/wallet") + public String createWallet(@ModelAttribute CreateWalletRequestDto createWalletRequestDto) { + walletService.registerWallet(createWalletRequestDto.toWallet()); + return "wallet/wallet-create"; + } + + @GetMapping("/customer/wallets") // customerId로 PATHVARIABLE 가능 + public String searchAllVouchersByCustomerId(@RequestParam String customerId, Model model) { + List vouchers = walletService.searchAllVouchersByCustomerId(UUID.fromString(customerId)); + model.addAttribute("serverTime", LocalDateTime.now()); + model.addAttribute("vouchers", vouchers); + return "wallet/wallet-search"; + } + + @PostMapping("/wallet-delete") + public String deleteWalletByVoucherIdAndCustomerId(@RequestParam String voucherId, @RequestParam String customerId) { + walletService.deleteWalletByVoucherIdAndCustomerId(UUID.fromString(voucherId), UUID.fromString(customerId)); + return "wallet/wallet-delete"; + } + + @GetMapping("/voucher/wallets") + public String searchAllCustomersByVoucherId(@RequestParam String voucherId, Model model) { + List customers = walletService.searchAllCustomersByVoucherId(UUID.fromString(voucherId)); + model.addAttribute("serverTime", LocalDateTime.now()); + model.addAttribute("customers", customers); + return "wallet/wallet-search"; + } + + @GetMapping("/wallet") + public String searchWallet() { + return "wallet/wallet-search"; + } + + @GetMapping("/wallet-delete") + public String deleteWallet() { + return "wallet/wallet-delete"; + } + + @GetMapping("/wallet-create") + public String createWallet() { + return "wallet/wallet-create"; + } +} diff --git a/src/main/java/org/prgms/kdtspringweek1/customer/repository/CsvFileCustomerRepository.java b/src/main/java/org/prgms/kdtspringweek1/customer/repository/CsvFileCustomerRepository.java index 9d077f4f21..d95d942d0f 100644 --- a/src/main/java/org/prgms/kdtspringweek1/customer/repository/CsvFileCustomerRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/customer/repository/CsvFileCustomerRepository.java @@ -2,6 +2,8 @@ import jakarta.annotation.PostConstruct; import org.prgms.kdtspringweek1.customer.entity.Customer; +import org.prgms.kdtspringweek1.exception.ExitException; +import org.prgms.kdtspringweek1.exception.ExitExceptionCode; import org.prgms.kdtspringweek1.exception.FileException; import org.prgms.kdtspringweek1.exception.FileExceptionCode; import org.slf4j.Logger; @@ -22,7 +24,7 @@ public class CsvFileCustomerRepository implements CustomerRepository { private File customerInfoCsv; @Value("${spring.file.customer.path}") private String customerInfoCsvPath; - private final static Logger logger = LoggerFactory.getLogger(CsvFileCustomerRepository.class); + private static final Logger logger = LoggerFactory.getLogger(CsvFileCustomerRepository.class); @PostConstruct private void init() { @@ -110,7 +112,7 @@ private Map getAllCustomersFromCSV() { } } catch (IOException e) { logger.error("Fail to read file when getAllVouchersFromCSV"); - throw new FileException(FileExceptionCode.FAIL_TO_READ_DATA_FROM_CSV); + throw new ExitException(ExitExceptionCode.FAIL_TO_LOAD_DATA); } return customers; diff --git a/src/main/java/org/prgms/kdtspringweek1/customer/repository/JdbcCustomerRepository.java b/src/main/java/org/prgms/kdtspringweek1/customer/repository/JdbcCustomerRepository.java index b035008fb7..bd8f1ca5fb 100644 --- a/src/main/java/org/prgms/kdtspringweek1/customer/repository/JdbcCustomerRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/customer/repository/JdbcCustomerRepository.java @@ -13,10 +13,9 @@ import java.util.*; -import static org.prgms.kdtspringweek1.JdbcUtils.toUUID; +import static org.prgms.kdtspringweek1.UUIDUtils.toUUID; @Repository -@Profile({"default", "test"}) public class JdbcCustomerRepository implements CustomerRepository { private static final Logger logger = LoggerFactory.getLogger(JdbcCustomerRepository.class); diff --git a/src/main/java/org/prgms/kdtspringweek1/customer/service/dto/FindCustomerResponseDto.java b/src/main/java/org/prgms/kdtspringweek1/customer/service/dto/FindCustomerResponseDto.java index 615fa907b9..7e82ff7e6d 100644 --- a/src/main/java/org/prgms/kdtspringweek1/customer/service/dto/FindCustomerResponseDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/customer/service/dto/FindCustomerResponseDto.java @@ -24,4 +24,16 @@ public void printCustomerInfo() { System.out.println(MessageFormat.format("Name: {0}", name)); System.out.println(MessageFormat.format("IsBlackCustomer: {0}", isBlackCustomer)); } + + public UUID getCustomerId() { + return customerId; + } + + public String getName() { + return name; + } + + public boolean getIsBlackCustomer() { + return isBlackCustomer; + } } diff --git a/src/main/java/org/prgms/kdtspringweek1/exception/ExitException.java b/src/main/java/org/prgms/kdtspringweek1/exception/ExitException.java new file mode 100644 index 0000000000..364f4dcb38 --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/exception/ExitException.java @@ -0,0 +1,14 @@ +package org.prgms.kdtspringweek1.exception; + +public class ExitException extends RuntimeException { + private String message; + + public ExitException(ExitExceptionCode exitExceptionCode) { + this.message = exitExceptionCode.getMessage(); + } + + @Override + public String getMessage() { + return message; + } +} diff --git a/src/main/java/org/prgms/kdtspringweek1/exception/ExitExceptionCode.java b/src/main/java/org/prgms/kdtspringweek1/exception/ExitExceptionCode.java new file mode 100644 index 0000000000..915b7d665a --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/exception/ExitExceptionCode.java @@ -0,0 +1,15 @@ +package org.prgms.kdtspringweek1.exception; + +public enum ExitExceptionCode { + FAIL_TO_LOAD_DATA("[System] 데이터 불러오기에 실패하였습니다."); + + private String message; + + ExitExceptionCode(String message) { + this.message = message; + } + + public String getMessage() { + return this.message; + } +} diff --git a/src/main/java/org/prgms/kdtspringweek1/exception/InputExceptionCode.java b/src/main/java/org/prgms/kdtspringweek1/exception/InputExceptionCode.java index 8de3454018..73c60034f8 100644 --- a/src/main/java/org/prgms/kdtspringweek1/exception/InputExceptionCode.java +++ b/src/main/java/org/prgms/kdtspringweek1/exception/InputExceptionCode.java @@ -2,7 +2,7 @@ public enum InputExceptionCode { INVALID_VOUCHER_FUNCTION_TYPE("[System] 지원 가능한 기능을 올바르게 입력해주세요."), - INVALID_VOUCHER_TYPE("[System] 생성 가능한 바우처 타입 번호를 입력해주세요."), + INVALID_VOUCHER_TYPE("[System] 생성 가능한 바우처 타입을 입력해주세요."), INVALID_PERCENT_DISCOUNT("[System] 할인율은 0초과 100이하의 값으로 입력해주세요."), INVALID_FIXED_AMOUNT("[System] 할인액은 양수로 입력해주세요."), INVALID_DISCOUNT_VALUE("[System] 할인값은 양수로 입력해주세요."); diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/FixedAmountVoucher.java b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/FixedAmountVoucher.java index d3e80ccfbe..015a90436c 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/FixedAmountVoucher.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/FixedAmountVoucher.java @@ -9,8 +9,8 @@ public class FixedAmountVoucher implements Voucher { private final UUID voucherId; private final long discountValue; - private final static VoucherType voucherType = VoucherType.FIXED_AMOUNT; - private final static Logger logger = LoggerFactory.getLogger(FixedAmountVoucher.class); + private static final VoucherType voucherType = VoucherType.FIXED_AMOUNT; + private static final Logger logger = LoggerFactory.getLogger(FixedAmountVoucher.class); public static FixedAmountVoucher createWithAmount(long amount) { return new FixedAmountVoucher(amount); diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/PercentDiscountVoucher.java b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/PercentDiscountVoucher.java index dabeadecea..3582595de8 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/PercentDiscountVoucher.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/PercentDiscountVoucher.java @@ -9,8 +9,8 @@ public class PercentDiscountVoucher implements Voucher { private final UUID voucherId; private final long discountValue; - private final static VoucherType voucherType = VoucherType.PERCENT_DISCOUNT; - private final static Logger logger = LoggerFactory.getLogger(PercentDiscountVoucher.class); + private static final VoucherType voucherType = VoucherType.PERCENT_DISCOUNT; + private static final Logger logger = LoggerFactory.getLogger(PercentDiscountVoucher.class); public static PercentDiscountVoucher createWithPercent(long percent) { return new PercentDiscountVoucher(percent); diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/VoucherType.java b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/VoucherType.java index 6ad6453e4d..ed3e21686b 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/entity/VoucherType.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/entity/VoucherType.java @@ -10,7 +10,7 @@ public enum VoucherType { private String name; private String unit; - private final static Logger logger = LoggerFactory.getLogger(VoucherType.class); + private static final Logger logger = LoggerFactory.getLogger(VoucherType.class); VoucherType(String name, String unit) { diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/CsvFileVoucherRepository.java b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/CsvFileVoucherRepository.java index bbd7767a28..e588b6f814 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/CsvFileVoucherRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/CsvFileVoucherRepository.java @@ -1,6 +1,8 @@ package org.prgms.kdtspringweek1.voucher.repository; import jakarta.annotation.PostConstruct; +import org.prgms.kdtspringweek1.exception.ExitException; +import org.prgms.kdtspringweek1.exception.ExitExceptionCode; import org.prgms.kdtspringweek1.exception.FileException; import org.prgms.kdtspringweek1.exception.FileExceptionCode; import org.prgms.kdtspringweek1.voucher.entity.FixedAmountVoucher; @@ -16,6 +18,7 @@ import java.io.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; @Repository @Profile("local") @@ -61,6 +64,13 @@ public Optional findById(UUID voucherId) { return Optional.ofNullable(vouchers.get(voucherId)); } + @Override + public List findVouchersByVoucherType(String voucherType) { + return vouchers.values().stream() + .filter(voucher -> voucher.getVoucherType().getName().equals(voucherType)) + .collect(Collectors.toList()); + } + @Override public Voucher update(Voucher voucher) { vouchers.put(voucher.getVoucherId(), voucher); @@ -111,7 +121,7 @@ private Map getAllVouchersFromCSV() { } } catch (IOException e) { logger.error("Fail to read file when getAllVouchersFromCSV"); - throw new FileException(FileExceptionCode.FAIL_TO_READ_DATA_FROM_CSV); + throw new ExitException(ExitExceptionCode.FAIL_TO_LOAD_DATA); } return vouchers; diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/JdbcVoucherRepository.java b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/JdbcVoucherRepository.java index 9e0b9049df..6b05bc22ed 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/JdbcVoucherRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/JdbcVoucherRepository.java @@ -16,10 +16,9 @@ import java.util.*; -import static org.prgms.kdtspringweek1.JdbcUtils.toUUID; +import static org.prgms.kdtspringweek1.UUIDUtils.toUUID; @Repository -@Profile({"default", "test"}) public class JdbcVoucherRepository implements VoucherRepository { private static final Logger logger = LoggerFactory.getLogger(JdbcVoucherRepository.class); @@ -84,6 +83,11 @@ public Optional findById(UUID voucherId) { } } + @Override + public List findVouchersByVoucherType(String voucherType) { + return jdbcTemplate.query("SELECT * FROM vouchers WHERE voucher_type = :voucherType", Collections.singletonMap("voucherType", voucherType), voucherRowMapper); + } + @Override public Voucher update(Voucher voucher) { int isUpdated = jdbcTemplate.update("UPDATE vouchers SET discount_value = :discountValue, voucher_type = :voucherType WHERE voucher_id = UUID_TO_BIN(:voucherId)", diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/MemoryVoucherRepository.java b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/MemoryVoucherRepository.java index 1c83f564bf..491021c6c7 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/MemoryVoucherRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/MemoryVoucherRepository.java @@ -8,6 +8,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; @Repository @Profile("dev") @@ -37,6 +38,13 @@ public Optional findById(UUID voucherId) { return Optional.ofNullable(vouchers.get(voucherId)); } + @Override + public List findVouchersByVoucherType(String voucherType) { + return vouchers.values().stream() + .filter(voucher -> voucher.getVoucherType().getName().equals(voucherType)) + .collect(Collectors.toList()); + } + @Override public Voucher update(Voucher voucher) { vouchers.put(voucher.getVoucherId(), voucher); diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/VoucherRepository.java b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/VoucherRepository.java index bfb511e07f..a29206410b 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/repository/VoucherRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/repository/VoucherRepository.java @@ -13,6 +13,8 @@ public interface VoucherRepository { Optional findById(UUID voucherId); + List findVouchersByVoucherType(String voucherType); + Voucher update(Voucher voucher); void deleteAll(); diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/service/VoucherService.java b/src/main/java/org/prgms/kdtspringweek1/voucher/service/VoucherService.java index 86b13406a9..fe1d8e68b0 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/service/VoucherService.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/service/VoucherService.java @@ -44,4 +44,10 @@ public void deleteAllVouchers() { public void deleteVoucherById(UUID voucherId) { voucherRepository.deleteById(voucherId); } + + public List searchVouchersByVoucherType(String voucherType) { + return voucherRepository.findVouchersByVoucherType(voucherType).stream() + .map(FindVoucherResponseDto::new) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/CreateVoucherRequestDto.java b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/CreateVoucherRequestDto.java index 432330488e..53f3a8d8c5 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/CreateVoucherRequestDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/CreateVoucherRequestDto.java @@ -4,31 +4,48 @@ import org.prgms.kdtspringweek1.voucher.entity.FixedAmountVoucher; import org.prgms.kdtspringweek1.voucher.entity.PercentDiscountVoucher; import org.prgms.kdtspringweek1.voucher.entity.Voucher; +import org.prgms.kdtspringweek1.voucher.entity.VoucherType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CreateVoucherRequestDto { - private final long discountValue; - private final static Logger logger = LoggerFactory.getLogger(CreateVoucherRequestDto.class); + private long discountValue; + private String voucherType; + private static final Logger logger = LoggerFactory.getLogger(CreateVoucherRequestDto.class); - public CreateVoucherRequestDto(long discountValue) { + public long getDiscountValue() { + return discountValue; + } + + public CreateVoucherRequestDto(long discountValue, String voucherType) { if (discountValue > 0) { this.discountValue = discountValue; + this.voucherType = voucherType; } else { logger.debug("Invalid discountValue -> {}", discountValue); throw new IllegalArgumentException(InputExceptionCode.INVALID_DISCOUNT_VALUE.getMessage()); } } - public Voucher toFixedAmountVoucher() { - return FixedAmountVoucher.createWithAmount(discountValue); + public String getVoucherType() { + return voucherType; } - public Voucher toPercentDiscountVoucher() { - return PercentDiscountVoucher.createWithPercent(discountValue); + public void setDiscountValue(long discountValue) { + this.discountValue = discountValue; } - public long getDiscountValue() { - return discountValue; + public void setVoucherType(String voucherType) { + this.voucherType = voucherType; + } + + public Voucher toVoucher() { + if (voucherType.equalsIgnoreCase(VoucherType.FIXED_AMOUNT.getName())) { + return FixedAmountVoucher.createWithAmount(discountValue); + } else if (voucherType.equalsIgnoreCase(VoucherType.PERCENT_DISCOUNT.getName())) { + return PercentDiscountVoucher.createWithPercent(discountValue); + } + + throw new IllegalArgumentException(InputExceptionCode.INVALID_VOUCHER_TYPE.getMessage()); } } diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/FindVoucherResponseDto.java b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/FindVoucherResponseDto.java index f3676582d7..78f541dd35 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/FindVoucherResponseDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/FindVoucherResponseDto.java @@ -23,4 +23,16 @@ public void printVoucherInfo() { System.out.println(MessageFormat.format("Voucher Id: {0}", voucherId)); System.out.println(MessageFormat.format("Discount: {0}", discountValue)); } + + public UUID getVoucherId() { + return voucherId; + } + + public long getDiscountValue() { + return discountValue; + } + + public VoucherType getVoucherType() { + return voucherType; + } } diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/SelectVoucherTypeDto.java b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/SelectVoucherTypeDto.java index 4471f8c5d3..9f35cccf5a 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/SelectVoucherTypeDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/SelectVoucherTypeDto.java @@ -16,7 +16,7 @@ public enum SelectVoucherTypeDto { private long num; private VoucherType voucherType; - private final static Logger logger = LoggerFactory.getLogger(SelectVoucherTypeDto.class); + private static final Logger logger = LoggerFactory.getLogger(SelectVoucherTypeDto.class); SelectVoucherTypeDto(long num, VoucherType voucherType) { this.num = num; diff --git a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/UpdateVoucherRequestDto.java b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/UpdateVoucherRequestDto.java index 616f120f1c..5bf2239cdf 100644 --- a/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/UpdateVoucherRequestDto.java +++ b/src/main/java/org/prgms/kdtspringweek1/voucher/service/dto/UpdateVoucherRequestDto.java @@ -12,7 +12,7 @@ public class UpdateVoucherRequestDto { private final UUID voucherId; private final long discountValue; - private final static Logger logger = LoggerFactory.getLogger(UpdateVoucherRequestDto.class); + private static final Logger logger = LoggerFactory.getLogger(UpdateVoucherRequestDto.class); public UpdateVoucherRequestDto(UUID voucherId, long discountValue) { if (discountValue > 0) { diff --git a/src/main/java/org/prgms/kdtspringweek1/wallet/repository/JdbcWalletRepository.java b/src/main/java/org/prgms/kdtspringweek1/wallet/repository/JdbcWalletRepository.java index 4f4eb39a72..f6fc76bb2e 100644 --- a/src/main/java/org/prgms/kdtspringweek1/wallet/repository/JdbcWalletRepository.java +++ b/src/main/java/org/prgms/kdtspringweek1/wallet/repository/JdbcWalletRepository.java @@ -17,10 +17,9 @@ import java.util.*; -import static org.prgms.kdtspringweek1.JdbcUtils.toUUID; +import static org.prgms.kdtspringweek1.UUIDUtils.toUUID; @Repository -@Profile({"default", "test"}) public class JdbcWalletRepository implements WalletRepository { private static final Logger logger = LoggerFactory.getLogger(JdbcWalletRepository.class); diff --git a/src/main/java/org/prgms/kdtspringweek1/wallet/service/dto/CreateWalletRequestDto.java b/src/main/java/org/prgms/kdtspringweek1/wallet/service/dto/CreateWalletRequestDto.java new file mode 100644 index 0000000000..a8bb427394 --- /dev/null +++ b/src/main/java/org/prgms/kdtspringweek1/wallet/service/dto/CreateWalletRequestDto.java @@ -0,0 +1,35 @@ +package org.prgms.kdtspringweek1.wallet.service.dto; + +import org.prgms.kdtspringweek1.wallet.entity.Wallet; + +import java.util.UUID; + +public class CreateWalletRequestDto { + private UUID voucherId; + private UUID customerId; + + public CreateWalletRequestDto(UUID voucherId, UUID customerId) { + this.voucherId = voucherId; + this.customerId = customerId; + } + + public UUID getVoucherId() { + return voucherId; + } + + public UUID getCustomerId() { + return customerId; + } + + public void setVoucherId(UUID voucherId) { + this.voucherId = voucherId; + } + + public void setCustomerId(UUID customerId) { + this.customerId = customerId; + } + + public Wallet toWallet() { + return Wallet.createWithVoucherIdAndCustomerId(voucherId, customerId); + } +} diff --git a/src/main/resources/templates/voucher/voucher-create.html b/src/main/resources/templates/voucher/voucher-create.html new file mode 100644 index 0000000000..581f00b173 --- /dev/null +++ b/src/main/resources/templates/voucher/voucher-create.html @@ -0,0 +1,31 @@ + + + + + + + + + Home + + +

Voucher Create

+
+
+ + +
+
+ + +
+ + List Voucher +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/voucher/voucher-delete.html b/src/main/resources/templates/voucher/voucher-delete.html new file mode 100644 index 0000000000..340711490d --- /dev/null +++ b/src/main/resources/templates/voucher/voucher-delete.html @@ -0,0 +1,24 @@ + + + + + + + + + Home + + +

Voucher Delete

+
+
+ + +
+ + List Voucher +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/voucher/voucher-list.html b/src/main/resources/templates/voucher/voucher-list.html new file mode 100644 index 0000000000..b16474b8c6 --- /dev/null +++ b/src/main/resources/templates/voucher/voucher-list.html @@ -0,0 +1,35 @@ + + + + + + + + + Home + + +

Voucher List

+ + + + + + + + + + + + + + + +
IDVoucher TypeDiscount Value
+Create Voucher +Delete Voucher +Search Voucher + + \ No newline at end of file diff --git a/src/main/resources/templates/voucher/voucher-search.html b/src/main/resources/templates/voucher/voucher-search.html new file mode 100644 index 0000000000..69e1927128 --- /dev/null +++ b/src/main/resources/templates/voucher/voucher-search.html @@ -0,0 +1,46 @@ + + + + + + + + + Home + + +

Search Voucher

+
+
+ + +
+ +
+

Search Result

+ + + + + + + + + + + + + + + + + + + + +
IDVoucher TypeDiscount Value
+List Voucher + + \ No newline at end of file diff --git a/src/main/resources/templates/wallet/wallet-create.html b/src/main/resources/templates/wallet/wallet-create.html new file mode 100644 index 0000000000..7ea3bc19fc --- /dev/null +++ b/src/main/resources/templates/wallet/wallet-create.html @@ -0,0 +1,28 @@ + + + + + + + + + Home + + +

Wallet Create

+
+
+ + +
+
+ + +
+ + Search Wallet +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/wallet/wallet-delete.html b/src/main/resources/templates/wallet/wallet-delete.html new file mode 100644 index 0000000000..21d0acf1dd --- /dev/null +++ b/src/main/resources/templates/wallet/wallet-delete.html @@ -0,0 +1,28 @@ + + + + + + + + + Home + + +

Wallet Delete

+
+
+ + +
+
+ + +
+ + Search Wallet +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/wallet/wallet-search.html b/src/main/resources/templates/wallet/wallet-search.html new file mode 100644 index 0000000000..4baa019bf7 --- /dev/null +++ b/src/main/resources/templates/wallet/wallet-search.html @@ -0,0 +1,66 @@ + + + + + + + + + Home + + +

Search Wallet By Customer Id

+
+
+ + +
+ +
+

Search Wallet By Voucher Id

+
+
+ + +
+ +
+

Search Result

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDVoucher TypeDiscount Value
IDNameIs Black Customer
+Create Wallet +Delete Wallet + + \ No newline at end of file diff --git a/src/test/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverterTest.java b/src/test/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverterTest.java index 4f2515dbde..c60c2839fa 100644 --- a/src/test/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverterTest.java +++ b/src/test/java/org/prgms/kdtspringweek1/controller/ConsoleInputConverterTest.java @@ -7,8 +7,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.prgms.kdtspringweek1.console.ScannerInput; +import org.prgms.kdtspringweek1.controller.consoleController.ConsoleInputConverter; import org.prgms.kdtspringweek1.voucher.service.dto.CreateVoucherRequestDto; -import org.prgms.kdtspringweek1.controller.dto.SelectFunctionTypeDto; +import org.prgms.kdtspringweek1.controller.consoleController.dto.SelectFunctionTypeDto; import org.prgms.kdtspringweek1.voucher.service.dto.SelectVoucherTypeDto; import org.prgms.kdtspringweek1.exception.InputExceptionCode; import org.prgms.kdtspringweek1.voucher.entity.VoucherType; @@ -110,11 +111,15 @@ void Fail_GetVoucherType_UnsupportedVoucher() { @DisplayName("바우처 할인 값 입력 성공") void Success_GetCreateVoucherRequestDto() { // given - String input = String.valueOf(random.nextLong(Long.MAX_VALUE) + 1); - when(scannerInput.getInput()).thenReturn(input); + String discountValue = String.valueOf(random.nextLong(Long.MAX_VALUE) + 1); + String voucherType = Arrays.stream(VoucherType.values()) + .skip(random.nextInt(VoucherType.values().length)) + .findFirst() + .map(VoucherType::getName) + .orElse(null); // when - CreateVoucherRequestDto createVoucherRequestDto = consoleInputConverter.getCreateVoucherRequestDto(); + CreateVoucherRequestDto createVoucherRequestDto = new CreateVoucherRequestDto(Long.parseLong(discountValue), voucherType);; // then assertThat(createVoucherRequestDto.getDiscountValue(), greaterThan(0L)); @@ -124,12 +129,16 @@ void Success_GetCreateVoucherRequestDto() { @DisplayName("바우처 할인 값 입력 실패 - 0이하의 값을 입력한 경우") void Fail_GetCreateVoucherRequestDto_ZeroOrLess() { // given - String input = String.valueOf(-1 * random.nextLong(Long.MAX_VALUE)); - when(scannerInput.getInput()).thenReturn(input); + String discountValue = String.valueOf(-1 * random.nextLong(Long.MAX_VALUE)); + String voucherType = Arrays.stream(VoucherType.values()) + .skip(random.nextInt(VoucherType.values().length)) + .findFirst() + .map(VoucherType::getName) + .orElse(null); // when IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { - consoleInputConverter.getCreateVoucherRequestDto(); + new CreateVoucherRequestDto(Long.parseLong(discountValue), voucherType); }); // then