diff --git a/pom.xml b/pom.xml
index 39ce23fbe2..635b07c92c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,25 @@
h2
test
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
diff --git a/restrequest/json-request.http b/restrequest/json-request.http
new file mode 100644
index 0000000000..bd7a08e2fd
--- /dev/null
+++ b/restrequest/json-request.http
@@ -0,0 +1,26 @@
+GET http://localhost:8080/api/json/v1/vouchers
+
+###
+
+GET http://localhost:8080/api/json/v1/vouchers/search?startDate=2023-07-16T00:00:00&endDate=2023-07-19T23:59:59&
+ discountType=fixed
+
+###
+
+POST http://localhost:8080/api/json/v1/vouchers
+Content-Type: application/json
+
+{
+ "discountType": "fixed",
+ "discountStringValue": "123"
+}
+
+###
+
+DELETE http://localhost:8080/api/json/v1/vouchers/f3ac7182-4f80-470a-99e7-478c29c41b0f
+
+###
+
+GET http://localhost:8080/api/json/v1/vouchers/cc295caf-cdb1-4fe6-8360-a2149a74f1b9
+
+###
\ No newline at end of file
diff --git a/restrequest/xml-request.http b/restrequest/xml-request.http
new file mode 100644
index 0000000000..b16d78d922
--- /dev/null
+++ b/restrequest/xml-request.http
@@ -0,0 +1,26 @@
+GET http://localhost:8080/api/xml/v1/vouchers
+
+###
+
+GET http://localhost:8080/api/xml/v1/vouchers/search?startDate=2023-07-16T00:00:00&endDate=2023-07-19T23:59:59&
+ discountType=fixed
+
+###
+
+POST http://localhost:8080/api/xml/v1/vouchers
+Content-Type: application/xml
+
+
+ fixed
+ 123
+
+
+###
+
+DELETE http://localhost:8080/api/xml/v1/vouchers/ea50d33d-d668-4dcd-b2b2-980b184ff003
+
+###
+
+GET http://localhost:8080/api/xml/v1/vouchers/fef87c80-ee1c-4aca-bf14-375930aff54c
+
+###
\ No newline at end of file
diff --git a/src/main/java/com/prgmrs/voucher/view/ConsoleApplication.java b/src/main/java/com/prgmrs/voucher/ConsoleApplication.java
similarity index 92%
rename from src/main/java/com/prgmrs/voucher/view/ConsoleApplication.java
rename to src/main/java/com/prgmrs/voucher/ConsoleApplication.java
index 06dde40d41..2913546343 100644
--- a/src/main/java/com/prgmrs/voucher/view/ConsoleApplication.java
+++ b/src/main/java/com/prgmrs/voucher/ConsoleApplication.java
@@ -1,12 +1,13 @@
-package com.prgmrs.voucher.view;
+package com.prgmrs.voucher;
-import com.prgmrs.voucher.controller.BlacklistController;
-import com.prgmrs.voucher.controller.UserController;
-import com.prgmrs.voucher.controller.VoucherController;
-import com.prgmrs.voucher.controller.WalletController;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.BlacklistController;
+import com.prgmrs.voucher.controller.console.UserController;
+import com.prgmrs.voucher.controller.console.VoucherController;
+import com.prgmrs.voucher.controller.console.WalletController;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.exception.WrongRangeFormatException;
import com.prgmrs.voucher.setting.BlacklistProperties;
+import com.prgmrs.voucher.view.RequestBodyCreator;
import com.prgmrs.voucher.view.io.ConsoleReader;
import com.prgmrs.voucher.view.io.ConsoleWriter;
import com.prgmrs.voucher.view.io.ManagementType;
diff --git a/src/main/java/com/prgmrs/voucher/controller/BlacklistController.java b/src/main/java/com/prgmrs/voucher/controller/console/BlacklistController.java
similarity index 87%
rename from src/main/java/com/prgmrs/voucher/controller/BlacklistController.java
rename to src/main/java/com/prgmrs/voucher/controller/console/BlacklistController.java
index b56670e8d2..4179201a16 100644
--- a/src/main/java/com/prgmrs/voucher/controller/BlacklistController.java
+++ b/src/main/java/com/prgmrs/voucher/controller/console/BlacklistController.java
@@ -1,6 +1,6 @@
-package com.prgmrs.voucher.controller;
+package com.prgmrs.voucher.controller.console;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.enums.StatusCode;
import com.prgmrs.voucher.exception.WrongRangeFormatException;
import com.prgmrs.voucher.service.BlacklistService;
diff --git a/src/main/java/com/prgmrs/voucher/controller/UserController.java b/src/main/java/com/prgmrs/voucher/controller/console/UserController.java
similarity index 94%
rename from src/main/java/com/prgmrs/voucher/controller/UserController.java
rename to src/main/java/com/prgmrs/voucher/controller/console/UserController.java
index 5edd129c2d..d7cecfd186 100644
--- a/src/main/java/com/prgmrs/voucher/controller/UserController.java
+++ b/src/main/java/com/prgmrs/voucher/controller/console/UserController.java
@@ -1,6 +1,6 @@
-package com.prgmrs.voucher.controller;
+package com.prgmrs.voucher.controller.console;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.UserRequest;
import com.prgmrs.voucher.dto.request.VoucherIdRequest;
import com.prgmrs.voucher.enums.StatusCode;
diff --git a/src/main/java/com/prgmrs/voucher/controller/VoucherController.java b/src/main/java/com/prgmrs/voucher/controller/console/VoucherController.java
similarity index 95%
rename from src/main/java/com/prgmrs/voucher/controller/VoucherController.java
rename to src/main/java/com/prgmrs/voucher/controller/console/VoucherController.java
index 607b8e15c0..a9f7aaa3aa 100644
--- a/src/main/java/com/prgmrs/voucher/controller/VoucherController.java
+++ b/src/main/java/com/prgmrs/voucher/controller/console/VoucherController.java
@@ -1,6 +1,6 @@
-package com.prgmrs.voucher.controller;
+package com.prgmrs.voucher.controller.console;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.UsernameRequest;
import com.prgmrs.voucher.dto.request.VoucherRequest;
import com.prgmrs.voucher.enums.StatusCode;
diff --git a/src/main/java/com/prgmrs/voucher/controller/WalletController.java b/src/main/java/com/prgmrs/voucher/controller/console/WalletController.java
similarity index 92%
rename from src/main/java/com/prgmrs/voucher/controller/WalletController.java
rename to src/main/java/com/prgmrs/voucher/controller/console/WalletController.java
index 728bc7b9e0..9572a3abf3 100644
--- a/src/main/java/com/prgmrs/voucher/controller/WalletController.java
+++ b/src/main/java/com/prgmrs/voucher/controller/console/WalletController.java
@@ -1,6 +1,6 @@
-package com.prgmrs.voucher.controller;
+package com.prgmrs.voucher.controller.console;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.AssignVoucherRequest;
import com.prgmrs.voucher.dto.request.RemoveVoucherRequest;
import com.prgmrs.voucher.enums.StatusCode;
diff --git a/src/main/java/com/prgmrs/voucher/dto/ResponseDTO.java b/src/main/java/com/prgmrs/voucher/controller/console/wrapper/ResponseDTO.java
similarity index 85%
rename from src/main/java/com/prgmrs/voucher/dto/ResponseDTO.java
rename to src/main/java/com/prgmrs/voucher/controller/console/wrapper/ResponseDTO.java
index 101722c4d5..e4c6bc4ee7 100644
--- a/src/main/java/com/prgmrs/voucher/dto/ResponseDTO.java
+++ b/src/main/java/com/prgmrs/voucher/controller/console/wrapper/ResponseDTO.java
@@ -1,4 +1,4 @@
-package com.prgmrs.voucher.dto;
+package com.prgmrs.voucher.controller.console.wrapper;
import com.prgmrs.voucher.enums.StatusCode;
diff --git a/src/main/java/com/prgmrs/voucher/controller/json/VoucherJsonController.java b/src/main/java/com/prgmrs/voucher/controller/json/VoucherJsonController.java
new file mode 100644
index 0000000000..793425c970
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/controller/json/VoucherJsonController.java
@@ -0,0 +1,47 @@
+package com.prgmrs.voucher.controller.json;
+
+import com.prgmrs.voucher.dto.request.VoucherIdRequest;
+import com.prgmrs.voucher.dto.request.VoucherRequest;
+import com.prgmrs.voucher.dto.request.VoucherSearchRequest;
+import com.prgmrs.voucher.dto.response.RemoveResponse;
+import com.prgmrs.voucher.dto.response.VoucherListResponse;
+import com.prgmrs.voucher.dto.response.VoucherResponse;
+import com.prgmrs.voucher.service.VoucherService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/json/v1")
+public class VoucherJsonController {
+
+ private final VoucherService voucherService;
+
+ public VoucherJsonController(VoucherService voucherService) {
+ this.voucherService = voucherService;
+ }
+
+ @GetMapping("/vouchers")
+ public ResponseEntity findAll() {
+ return ResponseEntity.ok(voucherService.findAll());
+ }
+
+ @GetMapping("/vouchers/search")
+ public ResponseEntity findByCreationTimeAndDiscountType(VoucherSearchRequest voucherSearchRequest) {
+ return ResponseEntity.ok(voucherService.findByCreationTimeAndDiscountType(voucherSearchRequest));
+ }
+
+ @PostMapping("/vouchers")
+ public ResponseEntity createVoucher(@RequestBody VoucherRequest voucherRequest) {
+ return ResponseEntity.ok(voucherService.createVoucher(voucherRequest));
+ }
+
+ @DeleteMapping("/vouchers/{voucherId}")
+ public ResponseEntity removeVoucher(@PathVariable("voucherId") VoucherIdRequest voucherIdRequest) {
+ return ResponseEntity.ok(voucherService.removeVoucher(voucherIdRequest));
+ }
+
+ @GetMapping("/vouchers/{voucherId}")
+ public ResponseEntity findById(@PathVariable("voucherId") VoucherIdRequest voucherIdRequest) {
+ return ResponseEntity.ok(voucherService.findById(voucherIdRequest));
+ }
+}
diff --git a/src/main/java/com/prgmrs/voucher/controller/mvc/VoucherMvcController.java b/src/main/java/com/prgmrs/voucher/controller/mvc/VoucherMvcController.java
new file mode 100644
index 0000000000..4bc3585688
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/controller/mvc/VoucherMvcController.java
@@ -0,0 +1,67 @@
+package com.prgmrs.voucher.controller.mvc;
+
+import com.prgmrs.voucher.controller.mvc.dto.VoucherMvcCreateRequest;
+import com.prgmrs.voucher.controller.mvc.dto.VoucherMvcRemoveRequest;
+import com.prgmrs.voucher.dto.request.VoucherIdRequest;
+import com.prgmrs.voucher.dto.request.VoucherRequest;
+import com.prgmrs.voucher.dto.response.VoucherListResponse;
+import com.prgmrs.voucher.model.Voucher;
+import com.prgmrs.voucher.service.VoucherService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/vouchers")
+public class VoucherMvcController {
+ private final VoucherService voucherService;
+
+ public VoucherMvcController(VoucherService voucherService) {
+ this.voucherService = voucherService;
+ }
+
+ @GetMapping("/")
+ public String showMainPage() {
+ return "voucher-main";
+ }
+
+ @GetMapping("/list")
+ public String showListPage(Model model) {
+ VoucherListResponse voucherListResponse = voucherService.findAll();
+ List voucherList = voucherListResponse.voucherList();
+ model.addAttribute("voucherList", voucherList);
+ return "voucher-list";
+ }
+
+ @GetMapping("/create")
+ public String showCreatePage(Model model) {
+ model.addAttribute("voucherCreateRequest", new VoucherMvcCreateRequest());
+ return "voucher-create";
+ }
+
+ @PostMapping("/create")
+ public String createVoucher(@ModelAttribute VoucherMvcCreateRequest voucherMvcCreateRequest) {
+ voucherService.createVoucher(new VoucherRequest(voucherMvcCreateRequest.getDiscountType(), voucherMvcCreateRequest.getDiscountStringValue()));
+ return "voucher-request-success";
+ }
+
+ @GetMapping("/remove")
+ public String showRemovePage(Model model) {
+ VoucherListResponse voucherListResponse = voucherService.findAll();
+ List voucherList = voucherListResponse.voucherList();
+ model.addAttribute("voucherList", voucherList);
+ model.addAttribute("voucherRemoveRequest", new VoucherMvcRemoveRequest());
+ return "voucher-remove";
+ }
+
+ @PostMapping("/remove")
+ public String removeVoucher(@ModelAttribute VoucherMvcRemoveRequest voucherMvcRemoveRequest) {
+ voucherService.removeVoucher(new VoucherIdRequest(voucherMvcRemoveRequest.getVoucherId()));
+ return "voucher-request-success";
+ }
+}
diff --git a/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcCreateRequest.java b/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcCreateRequest.java
new file mode 100644
index 0000000000..835b3ec92d
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcCreateRequest.java
@@ -0,0 +1,26 @@
+package com.prgmrs.voucher.controller.mvc.dto;
+
+public class VoucherMvcCreateRequest {
+ private String discountType;
+ private String discountStringValue;
+
+ public VoucherMvcCreateRequest() {
+ // Do nothing for thymeleaf support purpose
+ }
+
+ public String getDiscountType() {
+ return discountType;
+ }
+
+ public void setDiscountType(String discountType) {
+ this.discountType = discountType;
+ }
+
+ public String getDiscountStringValue() {
+ return discountStringValue;
+ }
+
+ public void setDiscountStringValue(String discountStringValue) {
+ this.discountStringValue = discountStringValue;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcRemoveRequest.java b/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcRemoveRequest.java
new file mode 100644
index 0000000000..a68beca54c
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/controller/mvc/dto/VoucherMvcRemoveRequest.java
@@ -0,0 +1,17 @@
+package com.prgmrs.voucher.controller.mvc.dto;
+
+public class VoucherMvcRemoveRequest {
+ private String voucherId;
+
+ public VoucherMvcRemoveRequest() {
+ // Do nothing for thymeleaf support purpose
+ }
+
+ public String getVoucherId() {
+ return voucherId;
+ }
+
+ public void setVoucherId(String voucherId) {
+ this.voucherId = voucherId;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/prgmrs/voucher/controller/xml/VoucherXmlController.java b/src/main/java/com/prgmrs/voucher/controller/xml/VoucherXmlController.java
new file mode 100644
index 0000000000..aa33cdb288
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/controller/xml/VoucherXmlController.java
@@ -0,0 +1,47 @@
+package com.prgmrs.voucher.controller.xml;
+
+import com.prgmrs.voucher.dto.request.VoucherIdRequest;
+import com.prgmrs.voucher.dto.request.VoucherRequest;
+import com.prgmrs.voucher.dto.request.VoucherSearchRequest;
+import com.prgmrs.voucher.dto.response.RemoveResponse;
+import com.prgmrs.voucher.dto.response.VoucherListResponse;
+import com.prgmrs.voucher.dto.response.VoucherResponse;
+import com.prgmrs.voucher.service.VoucherService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/xml/v1")
+public class VoucherXmlController {
+ private final VoucherService voucherService;
+
+ public VoucherXmlController(VoucherService voucherService) {
+ this.voucherService = voucherService;
+ }
+
+ @GetMapping(value = "/vouchers", produces = "application/xml")
+ public ResponseEntity findAll() {
+ return ResponseEntity.ok(voucherService.findAll());
+ }
+
+ @GetMapping(value = "/vouchers/search", produces = "application/xml")
+ public ResponseEntity findByCreationTimeAndDiscountType(VoucherSearchRequest voucherSearchRequest) {
+ return ResponseEntity.ok(voucherService.findByCreationTimeAndDiscountType(voucherSearchRequest));
+ }
+
+ @PostMapping(value = "/vouchers", consumes = "application/xml", produces = "application/xml")
+ public ResponseEntity createVoucher(@RequestBody VoucherRequest voucherRequest) {
+ System.out.println(voucherRequest); // or use a logger
+ return ResponseEntity.ok(voucherService.createVoucher(voucherRequest));
+ }
+
+ @DeleteMapping(value = "/vouchers/{voucherId}", produces = "application/xml")
+ public ResponseEntity removeVoucher(@PathVariable("voucherId") VoucherIdRequest voucherIdRequest) {
+ return ResponseEntity.ok(voucherService.removeVoucher(voucherIdRequest));
+ }
+
+ @GetMapping(value = "/vouchers/{voucherId}", produces = "application/xml")
+ public ResponseEntity findById(@PathVariable("voucherId") VoucherIdRequest voucherIdRequest) {
+ return ResponseEntity.ok(voucherService.findById(voucherIdRequest));
+ }
+}
diff --git a/src/main/java/com/prgmrs/voucher/dto/request/VoucherRequest.java b/src/main/java/com/prgmrs/voucher/dto/request/VoucherRequest.java
index 15441c7168..a0d6d236c6 100644
--- a/src/main/java/com/prgmrs/voucher/dto/request/VoucherRequest.java
+++ b/src/main/java/com/prgmrs/voucher/dto/request/VoucherRequest.java
@@ -1,5 +1,4 @@
package com.prgmrs.voucher.dto.request;
public record VoucherRequest(String discountType, String discountStringValue) {
-
}
\ No newline at end of file
diff --git a/src/main/java/com/prgmrs/voucher/dto/request/VoucherSearchRequest.java b/src/main/java/com/prgmrs/voucher/dto/request/VoucherSearchRequest.java
new file mode 100644
index 0000000000..7494ff4c8b
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/dto/request/VoucherSearchRequest.java
@@ -0,0 +1,19 @@
+package com.prgmrs.voucher.dto.request;
+
+import com.prgmrs.voucher.exception.WrongRangeFormatException;
+
+import java.time.LocalDateTime;
+
+public record VoucherSearchRequest(LocalDateTime startDate, LocalDateTime endDate, String discountType) {
+ public VoucherSearchRequest {
+ if (startDate == null) {
+ throw new WrongRangeFormatException("startDate cannot be null");
+ }
+ if (endDate == null) {
+ throw new WrongRangeFormatException("endDate cannot be null");
+ }
+ if (discountType == null || discountType.isBlank()) {
+ throw new WrongRangeFormatException("discountType cannot be null or blank");
+ }
+ }
+}
diff --git a/src/main/java/com/prgmrs/voucher/dto/response/RemoveResponse.java b/src/main/java/com/prgmrs/voucher/dto/response/RemoveResponse.java
new file mode 100644
index 0000000000..d11003127e
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/dto/response/RemoveResponse.java
@@ -0,0 +1,4 @@
+package com.prgmrs.voucher.dto.response;
+
+public record RemoveResponse(int rowsDeleted) {
+}
diff --git a/src/main/java/com/prgmrs/voucher/dto/response/VoucherResponse.java b/src/main/java/com/prgmrs/voucher/dto/response/VoucherResponse.java
index 9d64f2fcf9..6a59605129 100644
--- a/src/main/java/com/prgmrs/voucher/dto/response/VoucherResponse.java
+++ b/src/main/java/com/prgmrs/voucher/dto/response/VoucherResponse.java
@@ -5,4 +5,4 @@
import java.util.UUID;
public record VoucherResponse(UUID voucherUuid, DiscountStrategy discountStrategy) {
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/prgmrs/voucher/enums/DiscountType.java b/src/main/java/com/prgmrs/voucher/enums/DiscountType.java
index e60785ba80..b1cba6c980 100644
--- a/src/main/java/com/prgmrs/voucher/enums/DiscountType.java
+++ b/src/main/java/com/prgmrs/voucher/enums/DiscountType.java
@@ -3,15 +3,15 @@
import com.prgmrs.voucher.exception.WrongRangeFormatException;
public enum DiscountType {
- FIXED_AMOUNT_DISCOUNT("fixed", (short) 1),
- PERCENT_DISCOUNT("percent", (short) 2);
+ FIXED_AMOUNT_DISCOUNT("fixed", 1),
+ PERCENT_DISCOUNT("percent", 2);
private final String stringValue;
- private final short shortValue;
+ private final int value;
- DiscountType(String stringValue, short shortValue) {
+ DiscountType(String stringValue, int value) {
this.stringValue = stringValue;
- this.shortValue = shortValue;
+ this.value = value;
}
public static DiscountType fromString(String value) {
@@ -25,19 +25,23 @@ public static DiscountType fromString(String value) {
public static DiscountType fromShort(short value) {
for (DiscountType enumValue : DiscountType.values()) {
- if (enumValue.shortValue == value) {
+ if (enumValue.value == value) {
return enumValue;
}
}
throw new WrongRangeFormatException("no matching discount type from short");
}
- public static short toShortValue(String value) {
+ public static int fromEnumValueStringToValue(String value) {
for (DiscountType enumValue : DiscountType.values()) {
if (enumValue.name().equalsIgnoreCase(value)) {
- return enumValue.shortValue;
+ return enumValue.value;
}
}
throw new WrongRangeFormatException("no matching discount type from enum");
}
+
+ public int getValue() {
+ return value;
+ }
}
diff --git a/src/main/java/com/prgmrs/voucher/global/GlobalExceptionHandler.java b/src/main/java/com/prgmrs/voucher/global/GlobalExceptionHandler.java
new file mode 100644
index 0000000000..1902035c37
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/global/GlobalExceptionHandler.java
@@ -0,0 +1,26 @@
+package com.prgmrs.voucher.global;
+
+import com.prgmrs.voucher.exception.NoSuchVoucherTypeException;
+import com.prgmrs.voucher.exception.WrongRangeFormatException;
+import org.springframework.dao.DataAccessException;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class GlobalExceptionHandler {
+ @ExceptionHandler({WrongRangeFormatException.class, DataAccessException.class})
+ public ResponseEntity handleException(Exception e) {
+ return ResponseEntity.badRequest().body(e.getMessage());
+ }
+
+ @ExceptionHandler(NumberFormatException.class)
+ public ResponseEntity handleNumberFormatException(NumberFormatException e) {
+ return ResponseEntity.badRequest().body("invalid number was provided.");
+ }
+
+ @ExceptionHandler(NoSuchVoucherTypeException.class)
+ public ResponseEntity handleNoSuchVoucherTypeException(NoSuchVoucherTypeException e) {
+ return ResponseEntity.badRequest().body(e.getMessage());
+ }
+}
diff --git a/src/main/java/com/prgmrs/voucher/model/validator/VoucherValidator.java b/src/main/java/com/prgmrs/voucher/model/validator/VoucherValidator.java
index 5cc9a99b9a..da25ca53ff 100644
--- a/src/main/java/com/prgmrs/voucher/model/validator/VoucherValidator.java
+++ b/src/main/java/com/prgmrs/voucher/model/validator/VoucherValidator.java
@@ -23,6 +23,9 @@ public Long convertToLongWithValidation(String discountStringValue, DiscountType
}
private void isValidIntegerString(String discountStringValue) {
+ if (discountStringValue == null) {
+ throw new WrongRangeFormatException("discount value must be non-null value");
+ }
Pattern pattern = Pattern.compile("^[-+]?\\d+$");
if (!pattern.matcher(discountStringValue).matches()) {
throw new WrongRangeFormatException("only digit are allowed");
@@ -30,6 +33,10 @@ private void isValidIntegerString(String discountStringValue) {
}
private void isAmountValid(long discountValue, DiscountType discountType) {
+ if (discountType == null) {
+ throw new WrongRangeFormatException("discountType should not be null");
+ }
+
if (discountType == DiscountType.FIXED_AMOUNT_DISCOUNT
&& (0 >= discountValue || discountValue > voucherProperties.getMaximumFixedAmount())) {
throw new WrongRangeFormatException("amount should be between 0 to defined limit");
diff --git a/src/main/java/com/prgmrs/voucher/model/wrapper/Username.java b/src/main/java/com/prgmrs/voucher/model/wrapper/Username.java
index edbe596a94..2f9da61193 100644
--- a/src/main/java/com/prgmrs/voucher/model/wrapper/Username.java
+++ b/src/main/java/com/prgmrs/voucher/model/wrapper/Username.java
@@ -4,12 +4,16 @@
public record Username(String value) {
public Username {
+ if (value == null) {
+ throw new WrongRangeFormatException("input value null");
+ }
+
if (!value.matches("^[a-zA-Z]+$")) { // "\\d+" matches a sequence of one or more digits
throw new WrongRangeFormatException("username must contain only alphabets");
}
- if (value.length() > 255) {
- throw new WrongRangeFormatException("length must be equal to or less than 255");
+ if (value.length() < 1 || value.length() > 255) {
+ throw new WrongRangeFormatException("length must be between 1 to 255");
}
}
}
diff --git a/src/main/java/com/prgmrs/voucher/repository/JdbcVoucherRepository.java b/src/main/java/com/prgmrs/voucher/repository/JdbcVoucherRepository.java
index d766e92656..7f4c1771c6 100644
--- a/src/main/java/com/prgmrs/voucher/repository/JdbcVoucherRepository.java
+++ b/src/main/java/com/prgmrs/voucher/repository/JdbcVoucherRepository.java
@@ -14,6 +14,7 @@
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
+import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -62,13 +63,13 @@ public void save(Voucher voucher) {
paramMap.put("voucherId", voucher.voucherId().toString());
if (voucher.discountStrategy() instanceof FixedAmountDiscountStrategy fixedAmountDiscountStrategy) {
- short discountType = DiscountType.toShortValue("FIXED_AMOUNT_DISCOUNT");
+ int discountType = DiscountType.fromEnumValueStringToValue("FIXED_AMOUNT_DISCOUNT");
paramMap.put("discountType", discountType);
paramMap.put("discountValue", fixedAmountDiscountStrategy.amount().value());
}
if (voucher.discountStrategy() instanceof PercentDiscountStrategy percentDiscountStrategy) {
- short discountType = DiscountType.toShortValue("PERCENT_DISCOUNT");
+ int discountType = DiscountType.fromEnumValueStringToValue("PERCENT_DISCOUNT");
paramMap.put("discountType", discountType);
paramMap.put("discountValue", percentDiscountStrategy.percent().value());
}
@@ -86,14 +87,14 @@ public List findAll() {
@Override
public List getAssignedVoucherListByUsername(Username username) {
String sql = """
- SELECT
- v.voucher_id, v.discount_type, v.discount_value
- FROM `voucher` v
- INNER JOIN `wallet` w ON v.voucher_id = w.voucher_id
- INNER JOIN `user` u ON w.user_id = u.user_id
- WHERE u.username = :username
- AND w.unassigned_time IS NULL
- ORDER BY v.created_at
+ SELECT
+ v.voucher_id, v.discount_type, v.discount_value
+ FROM `voucher` v
+ INNER JOIN `wallet` w ON v.voucher_id = w.voucher_id
+ INNER JOIN `user` u ON w.user_id = u.user_id
+ WHERE u.username = :username
+ AND w.unassigned_time IS NULL
+ ORDER BY v.created_at
""";
Map paramMap = new HashMap<>();
@@ -126,16 +127,61 @@ public List getNotAssignedVoucherList() {
LEFT JOIN `wallet` w ON v.voucher_id = w.voucher_id
WHERE w.voucher_id IS NULL
OR (v.voucher_id IN (SELECT
- w.voucher_id
+ w.voucher_id
FROM `wallet` w
- GROUP BY w.voucher_id
- HAVING MAX(w.is_used) = 0
- AND MAX(CASE WHEN w.unassigned_time
- IS NULL THEN 1 ELSE 0 END) = 0
+ GROUP BY w.voucher_id
+ HAVING MAX(w.is_used) = 0
+ AND MAX(CASE WHEN w.unassigned_time IS NULL THEN 1 ELSE 0 END) = 0
)
)
""";
return jdbcTemplate.query(sql, toRowMapper());
}
+
+ @Override
+ public List findByCreationTimeAndDiscountType(LocalDateTime startDate, LocalDateTime endDate, int discountType) {
+ String sql = """
+ SELECT
+ v.voucher_id, v.discount_type, v.discount_value
+ FROM `voucher` v
+ WHERE (v.discount_type = :discountType)
+ AND (v.created_at BETWEEN :startDate AND :endDate)
+ """;
+
+ Map paramMap = new HashMap<>();
+
+ paramMap.put("startDate", startDate);
+ paramMap.put("endDate", endDate);
+ paramMap.put("discountType", discountType);
+
+ return jdbcTemplate.query(sql, paramMap, toRowMapper());
+ }
+
+ @Override
+ public int removeVoucher(UUID voucherUUID) {
+ String sql = "DELETE FROM `voucher` v WHERE v.voucher_id = :voucherId";
+
+ Map paramMap = new HashMap<>();
+
+ paramMap.put("voucherId", voucherUUID.toString());
+
+ return jdbcTemplate.update(sql, paramMap);
+ }
+
+ @Override
+ public Voucher findById(UUID voucherUUID) {
+ String sql = """
+ SELECT
+ v.voucher_id, v.discount_type, v.discount_value
+ FROM `voucher` v
+ WHERE v.voucher_id = :voucherId
+ """;
+
+ Map paramMap = new HashMap<>();
+
+ paramMap.put("voucherId", voucherUUID.toString());
+
+ return jdbcTemplate.queryForObject(sql, paramMap, toRowMapper());
+ }
}
diff --git a/src/main/java/com/prgmrs/voucher/repository/VoucherRepository.java b/src/main/java/com/prgmrs/voucher/repository/VoucherRepository.java
index a0005f8b3e..ee9ef701d4 100644
--- a/src/main/java/com/prgmrs/voucher/repository/VoucherRepository.java
+++ b/src/main/java/com/prgmrs/voucher/repository/VoucherRepository.java
@@ -3,7 +3,9 @@
import com.prgmrs.voucher.model.Voucher;
import com.prgmrs.voucher.model.wrapper.Username;
+import java.time.LocalDateTime;
import java.util.List;
+import java.util.UUID;
public interface VoucherRepository {
void save(Voucher voucher);
@@ -15,4 +17,10 @@ public interface VoucherRepository {
List getNotAssignedVoucherList();
List getAssignedVoucherList();
+
+ List findByCreationTimeAndDiscountType(LocalDateTime startDate, LocalDateTime endDate, int discountType);
+
+ int removeVoucher(UUID voucherUUID);
+
+ Voucher findById(UUID voucherUUID);
}
diff --git a/src/main/java/com/prgmrs/voucher/service/UserService.java b/src/main/java/com/prgmrs/voucher/service/UserService.java
index 3709191055..d67622fa5d 100644
--- a/src/main/java/com/prgmrs/voucher/service/UserService.java
+++ b/src/main/java/com/prgmrs/voucher/service/UserService.java
@@ -7,8 +7,8 @@
import com.prgmrs.voucher.model.User;
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.UserRepository;
-import com.prgmrs.voucher.util.UUIDGenerator;
-import com.prgmrs.voucher.util.UuidConverter;
+import com.prgmrs.voucher.util.IdGenerator;
+import com.prgmrs.voucher.util.UUIDConverter;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -17,13 +17,15 @@
@Service
public class UserService {
private final UserRepository userRepository;
+ private final IdGenerator idGenerator;
- public UserService(UserRepository userRepository) {
+ public UserService(UserRepository userRepository, IdGenerator idGenerator) {
this.userRepository = userRepository;
+ this.idGenerator = idGenerator;
}
public UserResponse createUser(UserRequest userRequest) { // 유저 생성
- UUID uuid = UUIDGenerator.generateUUID();
+ UUID uuid = idGenerator.generate();
User user = new User(uuid, new Username(userRequest.username()));
userRepository.save(user);
@@ -41,7 +43,7 @@ public UserListResponse getUserListWithVoucherAssigned() {
}
public UserResponse getUserByVoucherId(VoucherIdRequest voucherIdRequest) {
- UUID uuid = UuidConverter.fromString(voucherIdRequest.voucherUuid());
+ UUID uuid = UUIDConverter.fromString(voucherIdRequest.voucherUuid());
User user = userRepository.getUserByVoucherId(uuid);
return new UserResponse(user.userId(), user.username().value());
diff --git a/src/main/java/com/prgmrs/voucher/service/VoucherService.java b/src/main/java/com/prgmrs/voucher/service/VoucherService.java
index e220be247b..a78f4cb07b 100644
--- a/src/main/java/com/prgmrs/voucher/service/VoucherService.java
+++ b/src/main/java/com/prgmrs/voucher/service/VoucherService.java
@@ -1,7 +1,10 @@
package com.prgmrs.voucher.service;
import com.prgmrs.voucher.dto.request.UsernameRequest;
+import com.prgmrs.voucher.dto.request.VoucherIdRequest;
import com.prgmrs.voucher.dto.request.VoucherRequest;
+import com.prgmrs.voucher.dto.request.VoucherSearchRequest;
+import com.prgmrs.voucher.dto.response.RemoveResponse;
import com.prgmrs.voucher.dto.response.VoucherListResponse;
import com.prgmrs.voucher.dto.response.VoucherResponse;
import com.prgmrs.voucher.enums.DiscountType;
@@ -14,19 +17,22 @@
import com.prgmrs.voucher.model.wrapper.Percent;
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.VoucherRepository;
-import com.prgmrs.voucher.util.UUIDGenerator;
+import com.prgmrs.voucher.util.IdGenerator;
import org.springframework.stereotype.Service;
+import java.time.LocalDateTime;
import java.util.UUID;
@Service
public class VoucherService {
private final VoucherRepository voucherRepository;
private final VoucherValidator voucherValidator;
+ private final IdGenerator idGenerator;
- public VoucherService(VoucherRepository voucherRepository, VoucherValidator voucherValidator) {
+ public VoucherService(VoucherRepository voucherRepository, VoucherValidator voucherValidator, IdGenerator idGenerator) {
this.voucherRepository = voucherRepository;
this.voucherValidator = voucherValidator;
+ this.idGenerator = idGenerator;
}
public VoucherResponse createVoucher(VoucherRequest voucherRequest) {
@@ -34,7 +40,7 @@ public VoucherResponse createVoucher(VoucherRequest voucherRequest) {
Long validatedLongValue =
voucherValidator.convertToLongWithValidation(voucherRequest.discountStringValue(), discountType);
- UUID uuid = UUIDGenerator.generateUUID();
+ UUID uuid = idGenerator.generate();
Voucher voucher;
switch (discountType) {
@@ -72,4 +78,22 @@ public VoucherListResponse getNotAssignedVoucher() {
public VoucherListResponse getAssignedVoucherList() {
return new VoucherListResponse(voucherRepository.getAssignedVoucherList());
}
+
+ public VoucherListResponse findByCreationTimeAndDiscountType(VoucherSearchRequest voucherSearchRequest) {
+ LocalDateTime startDate = voucherSearchRequest.startDate();
+ LocalDateTime endDate = voucherSearchRequest.endDate();
+ DiscountType discountType = DiscountType.fromString(voucherSearchRequest.discountType());
+ return new VoucherListResponse(voucherRepository.findByCreationTimeAndDiscountType(startDate, endDate, discountType.getValue()));
+ }
+
+ public RemoveResponse removeVoucher(VoucherIdRequest voucherIdRequest) {
+ UUID uuid = UUID.fromString(voucherIdRequest.voucherUuid());
+ return new RemoveResponse(voucherRepository.removeVoucher(uuid));
+ }
+
+ public VoucherResponse findById(VoucherIdRequest voucherIdRequest) {
+ UUID uuid = UUID.fromString(voucherIdRequest.voucherUuid());
+ Voucher voucher = voucherRepository.findById(uuid);
+ return new VoucherResponse(voucher.voucherId(), voucher.discountStrategy());
+ }
}
diff --git a/src/main/java/com/prgmrs/voucher/service/WalletService.java b/src/main/java/com/prgmrs/voucher/service/WalletService.java
index fb618d2c03..615c91b000 100644
--- a/src/main/java/com/prgmrs/voucher/service/WalletService.java
+++ b/src/main/java/com/prgmrs/voucher/service/WalletService.java
@@ -8,7 +8,7 @@
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.UserRepository;
import com.prgmrs.voucher.repository.WalletRepository;
-import com.prgmrs.voucher.util.UuidConverter;
+import com.prgmrs.voucher.util.UUIDConverter;
import org.springframework.stereotype.Service;
import java.util.UUID;
@@ -25,14 +25,14 @@ public WalletService(UserRepository userRepository, WalletRepository walletRepos
public WalletResponse assignVoucher(AssignVoucherRequest assignVoucherRequest) {
User user = userRepository.findByUsername(new Username(assignVoucherRequest.username()));
- Wallet wallet = new Wallet(user.userId(), UuidConverter.fromString(assignVoucherRequest.voucherUuid()));
+ Wallet wallet = new Wallet(user.userId(), UUIDConverter.fromString(assignVoucherRequest.voucherUuid()));
walletRepository.save(wallet);
return new WalletResponse(wallet.voucherId(), user.username().value());
}
public WalletResponse removeVoucher(RemoveVoucherRequest removeVoucherRequest) {
- UUID convertedUuid = UuidConverter.fromString(removeVoucherRequest.voucherUuid());
+ UUID convertedUuid = UUIDConverter.fromString(removeVoucherRequest.voucherUuid());
User user = userRepository.getUserByVoucherId(convertedUuid);
Wallet wallet = new Wallet(user.userId(), convertedUuid);
walletRepository.remove(wallet);
diff --git a/src/main/java/com/prgmrs/voucher/util/IdGenerator.java b/src/main/java/com/prgmrs/voucher/util/IdGenerator.java
new file mode 100644
index 0000000000..eb38eb11b1
--- /dev/null
+++ b/src/main/java/com/prgmrs/voucher/util/IdGenerator.java
@@ -0,0 +1,8 @@
+package com.prgmrs.voucher.util;
+
+import java.util.UUID;
+
+public interface IdGenerator {
+
+ UUID generate();
+}
diff --git a/src/main/java/com/prgmrs/voucher/util/UuidConverter.java b/src/main/java/com/prgmrs/voucher/util/UUIDConverter.java
similarity index 75%
rename from src/main/java/com/prgmrs/voucher/util/UuidConverter.java
rename to src/main/java/com/prgmrs/voucher/util/UUIDConverter.java
index 8503499d43..fff7295bb0 100644
--- a/src/main/java/com/prgmrs/voucher/util/UuidConverter.java
+++ b/src/main/java/com/prgmrs/voucher/util/UUIDConverter.java
@@ -1,12 +1,15 @@
package com.prgmrs.voucher.util;
import com.prgmrs.voucher.exception.WrongRangeFormatException;
-import org.springframework.stereotype.Component;
import java.util.UUID;
-@Component
-public class UuidConverter {
+public class UUIDConverter {
+
+ private UUIDConverter() {
+ throw new IllegalStateException("Util class");
+ }
+
public static UUID fromString(String uuidString) {
try {
return UUID.fromString(uuidString);
diff --git a/src/main/java/com/prgmrs/voucher/util/UUIDGenerator.java b/src/main/java/com/prgmrs/voucher/util/UUIDGenerator.java
index 1517a46692..769d4561c8 100644
--- a/src/main/java/com/prgmrs/voucher/util/UUIDGenerator.java
+++ b/src/main/java/com/prgmrs/voucher/util/UUIDGenerator.java
@@ -5,8 +5,8 @@
import java.util.UUID;
@Component
-public class UUIDGenerator {
- public static UUID generateUUID() {
+public class UUIDGenerator implements IdGenerator {
+ public UUID generate() {
return UUID.randomUUID();
}
}
diff --git a/src/main/java/com/prgmrs/voucher/view/io/ConsoleMessage.java b/src/main/java/com/prgmrs/voucher/view/io/ConsoleMessage.java
index f12e632d37..bd0082b1aa 100644
--- a/src/main/java/com/prgmrs/voucher/view/io/ConsoleMessage.java
+++ b/src/main/java/com/prgmrs/voucher/view/io/ConsoleMessage.java
@@ -10,9 +10,11 @@ public enum ConsoleMessage {
ConsoleMessage(String message) {
this.message = message;
}
+
public String getValue() {
return message;
}
+
@Override
public String toString() {
return this.message;
diff --git a/src/main/java/com/prgmrs/voucher/view/io/ConsoleWriter.java b/src/main/java/com/prgmrs/voucher/view/io/ConsoleWriter.java
index f4e4af79d8..b2d61e6b1d 100644
--- a/src/main/java/com/prgmrs/voucher/view/io/ConsoleWriter.java
+++ b/src/main/java/com/prgmrs/voucher/view/io/ConsoleWriter.java
@@ -1,6 +1,6 @@
package com.prgmrs.voucher.view.io;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import org.springframework.stereotype.Component;
@Component
@@ -11,7 +11,7 @@ public void write(T message) {
public void showManagementType() {
for (ManagementType type : ManagementType.values()) {
- write(type.getValue());
+ write(type.getMessage());
}
}
diff --git a/src/main/java/com/prgmrs/voucher/view/io/ManagementType.java b/src/main/java/com/prgmrs/voucher/view/io/ManagementType.java
index 030acfa2b8..6e497a9bd2 100644
--- a/src/main/java/com/prgmrs/voucher/view/io/ManagementType.java
+++ b/src/main/java/com/prgmrs/voucher/view/io/ManagementType.java
@@ -14,25 +14,25 @@ public enum ManagementType {
SHOW_VOUCHER_OWNER("Type '8' to show the owner of specific voucher."),
SHOW_BLACKLIST("Type '9' to print out the blacklist.");
- private final String value;
+ private final String message;
- ManagementType(String value) {
- this.value = value;
+ ManagementType(String message) {
+ this.message = message;
}
- public static ManagementType of(String value) {
- try {
- int convertedValue = Integer.parseInt(value);
- if (convertedValue >= 0 && convertedValue < ManagementType.values().length) {
- return ManagementType.values()[convertedValue];
- }
- throw new WrongRangeFormatException("no such option exists");
- } catch (NumberFormatException e) {
- throw new WrongRangeFormatException("input must be number");
+ public static ManagementType of(String orderNumberAsString) {
+ int orderNumber = Integer.parseInt(orderNumberAsString);
+ if (isWithinOrderNumberRange(orderNumber)) {
+ return ManagementType.values()[orderNumber];
}
+ throw new WrongRangeFormatException("no such option exists");
}
- public String getValue() {
- return value;
+ private static boolean isWithinOrderNumberRange(int orderNumber) {
+ return orderNumber >= 0 && orderNumber < ManagementType.values().length;
+ }
+
+ public String getMessage() {
+ return message;
}
}
diff --git a/src/main/resources/VoucherMgmtDDL.sql b/src/main/resources/VoucherMgmtDDL.sql
index 246de9fbb3..a2556b5390 100644
--- a/src/main/resources/VoucherMgmtDDL.sql
+++ b/src/main/resources/VoucherMgmtDDL.sql
@@ -23,7 +23,7 @@ CREATE TABLE `wallet`
(
`voucher_id` CHAR(36) NOT NULL,
`user_id` CHAR(36) NOT NULL,
- `assigned_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ `assigned_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`unassigned_time` TIMESTAMP,
`is_used` BOOLEAN NOT NULL DEFAULT 0,
PRIMARY KEY (`voucher_id`, `user_id`, `assigned_time`),
diff --git a/src/main/resources/templates/voucher-create.html b/src/main/resources/templates/voucher-create.html
new file mode 100644
index 0000000000..0626f6aee0
--- /dev/null
+++ b/src/main/resources/templates/voucher-create.html
@@ -0,0 +1,22 @@
+
+
+
+ Create Voucher
+
+
+Create Voucher
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/templates/voucher-list.html b/src/main/resources/templates/voucher-list.html
new file mode 100644
index 0000000000..8474d4f4b8
--- /dev/null
+++ b/src/main/resources/templates/voucher-list.html
@@ -0,0 +1,30 @@
+
+
+
+ Voucher List
+
+
+
+Voucher List
+
+
+ | No. |
+ voucher ID |
+ DiscountType and Value |
+
+
+ |
+ | |
+ |
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/templates/voucher-main.html b/src/main/resources/templates/voucher-main.html
new file mode 100644
index 0000000000..d66e752ffc
--- /dev/null
+++ b/src/main/resources/templates/voucher-main.html
@@ -0,0 +1,21 @@
+
+
+
+ Main Page
+
+
+Voucher Management System
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/templates/voucher-remove.html b/src/main/resources/templates/voucher-remove.html
new file mode 100644
index 0000000000..d4fcaa7a99
--- /dev/null
+++ b/src/main/resources/templates/voucher-remove.html
@@ -0,0 +1,32 @@
+
+
+
+
+ Delete Voucher
+
+
+
+Delete Voucher
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/templates/voucher-request-success.html b/src/main/resources/templates/voucher-request-success.html
new file mode 100644
index 0000000000..262df20343
--- /dev/null
+++ b/src/main/resources/templates/voucher-request-success.html
@@ -0,0 +1,12 @@
+
+
+
+ Request Successful
+
+
+Success!
+
+
+
diff --git a/src/test/java/com/prgmrs/voucher/VoucherApplicationTests.java b/src/test/java/com/prgmrs/voucher/VoucherApplicationTests.java
index d3297eefab..d238dd4355 100644
--- a/src/test/java/com/prgmrs/voucher/VoucherApplicationTests.java
+++ b/src/test/java/com/prgmrs/voucher/VoucherApplicationTests.java
@@ -6,5 +6,6 @@
@SpringBootTest
class VoucherApplicationTests {
@Autowired
- VoucherApplicationTests() {}
+ VoucherApplicationTests() {
+ }
}
diff --git a/src/test/java/com/prgmrs/voucher/controller/UserControllerTest.java b/src/test/java/com/prgmrs/voucher/controller/UserControllerTest.java
index 12a0bfc565..9c23c61e29 100644
--- a/src/test/java/com/prgmrs/voucher/controller/UserControllerTest.java
+++ b/src/test/java/com/prgmrs/voucher/controller/UserControllerTest.java
@@ -1,6 +1,7 @@
package com.prgmrs.voucher.controller;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.UserController;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.UserRequest;
import com.prgmrs.voucher.dto.request.VoucherIdRequest;
import com.prgmrs.voucher.dto.response.UserListResponse;
@@ -8,7 +9,6 @@
import com.prgmrs.voucher.model.User;
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.service.UserService;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -40,13 +40,13 @@ class UserControllerTest {
void setUp() {
MockitoAnnotations.openMocks(this);
- UUID uuidTyler = UUIDGenerator.generateUUID();
+ UUID uuidTyler = UUID.randomUUID();
User userTyler = new User(uuidTyler, new Username("tyler"));
userRequest = new UserRequest(userTyler.username().value());
userResponse = new UserResponse(uuidTyler, userTyler.username().value());
- UUID uuidJohn = UUIDGenerator.generateUUID();
+ UUID uuidJohn = UUID.randomUUID();
User userJohn = new User(uuidJohn, new Username("john"));
userListResponse = new UserListResponse(Arrays.asList(userTyler, userJohn));
}
@@ -94,7 +94,7 @@ void GetUserListWithVoucherAssigned_NoParam_SameUserListResponse() {
@DisplayName("바우처 아이디에 해당하는 유저를 불러온다.")
void GetUserByVoucherId_userListRequest_SameUserResponse() {
// Given
- UUID voucherUuid = UUIDGenerator.generateUUID();
+ UUID voucherUuid = UUID.randomUUID();
voucherIdRequest = new VoucherIdRequest(voucherUuid.toString());
given(userService.getUserByVoucherId(voucherIdRequest)).willReturn(userResponse);
diff --git a/src/test/java/com/prgmrs/voucher/controller/VoucherControllerTest.java b/src/test/java/com/prgmrs/voucher/controller/VoucherJsonControllerTest.java
similarity index 93%
rename from src/test/java/com/prgmrs/voucher/controller/VoucherControllerTest.java
rename to src/test/java/com/prgmrs/voucher/controller/VoucherJsonControllerTest.java
index 76393cde3a..4e94f45288 100644
--- a/src/test/java/com/prgmrs/voucher/controller/VoucherControllerTest.java
+++ b/src/test/java/com/prgmrs/voucher/controller/VoucherJsonControllerTest.java
@@ -1,6 +1,7 @@
package com.prgmrs.voucher.controller;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.VoucherController;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.UsernameRequest;
import com.prgmrs.voucher.dto.request.VoucherRequest;
import com.prgmrs.voucher.dto.response.VoucherListResponse;
@@ -11,7 +12,6 @@
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.Percent;
import com.prgmrs.voucher.service.VoucherService;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -26,7 +26,7 @@
import static org.mockito.BDDMockito.given;
@DisplayName("바우처 컨트롤러 레이어를 테스트한다.")
-class VoucherControllerTest {
+class VoucherJsonControllerTest {
@InjectMocks
VoucherController voucherController;
@@ -43,13 +43,13 @@ void setUp() {
MockitoAnnotations.openMocks(this);
PercentDiscountStrategy percentDiscountStrategy = new PercentDiscountStrategy(new Percent(10));
- UUID voucherUuid1 = UUIDGenerator.generateUUID();
+ UUID voucherUuid1 = UUID.randomUUID();
Voucher voucher1 = new Voucher(voucherUuid1, percentDiscountStrategy);
voucherRequest = new VoucherRequest("percent", "10");
voucherResponse = new VoucherResponse(voucherUuid1, percentDiscountStrategy);
FixedAmountDiscountStrategy fixedAmountDiscountStrategy = new FixedAmountDiscountStrategy(new Amount(300));
- UUID voucherUuid2 = UUIDGenerator.generateUUID();
+ UUID voucherUuid2 = UUID.randomUUID();
Voucher voucher2 = new Voucher(voucherUuid2, fixedAmountDiscountStrategy);
voucherListResponse = new VoucherListResponse(Arrays.asList(voucher1, voucher2));
}
diff --git a/src/test/java/com/prgmrs/voucher/controller/WalletControllerTest.java b/src/test/java/com/prgmrs/voucher/controller/WalletControllerTest.java
index fe4598aa2c..e5d9ea699e 100644
--- a/src/test/java/com/prgmrs/voucher/controller/WalletControllerTest.java
+++ b/src/test/java/com/prgmrs/voucher/controller/WalletControllerTest.java
@@ -1,11 +1,11 @@
package com.prgmrs.voucher.controller;
-import com.prgmrs.voucher.dto.ResponseDTO;
+import com.prgmrs.voucher.controller.console.WalletController;
+import com.prgmrs.voucher.controller.console.wrapper.ResponseDTO;
import com.prgmrs.voucher.dto.request.AssignVoucherRequest;
import com.prgmrs.voucher.dto.request.RemoveVoucherRequest;
import com.prgmrs.voucher.dto.response.WalletResponse;
import com.prgmrs.voucher.service.WalletService;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -37,7 +37,7 @@ void setUp() {
String username = "tyler";
- UUID voucherUuid = UUIDGenerator.generateUUID();
+ UUID voucherUuid = UUID.randomUUID();
String voucherUuidString = voucherUuid.toString();
assignVoucherRequest = new AssignVoucherRequest(username, voucherUuidString);
diff --git a/src/test/java/com/prgmrs/voucher/model/FixedAmountVoucherTest.java b/src/test/java/com/prgmrs/voucher/model/FixedAmountVoucherTest.java
index 6b9f81d6bf..9ad7348cd1 100644
--- a/src/test/java/com/prgmrs/voucher/model/FixedAmountVoucherTest.java
+++ b/src/test/java/com/prgmrs/voucher/model/FixedAmountVoucherTest.java
@@ -3,7 +3,6 @@
import com.prgmrs.voucher.model.strategy.FixedAmountDiscountStrategy;
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.DiscountValue;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -22,7 +21,7 @@ class FixedAmountVoucherTest {
@BeforeEach
void setUp() {
- voucherId = UUIDGenerator.generateUUID();
+ voucherId = UUID.randomUUID();
amount = new Amount(500);
fixedAmountDiscountStrategy = new FixedAmountDiscountStrategy(amount);
}
diff --git a/src/test/java/com/prgmrs/voucher/model/PercentDiscountVoucherTest.java b/src/test/java/com/prgmrs/voucher/model/PercentDiscountVoucherTest.java
index 2d04b9eefa..69352d0438 100644
--- a/src/test/java/com/prgmrs/voucher/model/PercentDiscountVoucherTest.java
+++ b/src/test/java/com/prgmrs/voucher/model/PercentDiscountVoucherTest.java
@@ -4,7 +4,6 @@
import com.prgmrs.voucher.model.strategy.PercentDiscountStrategy;
import com.prgmrs.voucher.model.wrapper.DiscountValue;
import com.prgmrs.voucher.model.wrapper.Percent;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -23,7 +22,7 @@ class PercentDiscountVoucherTest {
@BeforeEach
void setUp() {
- voucherId = UUIDGenerator.generateUUID();
+ voucherId = UUID.randomUUID();
percent = new Percent(50);
percentDiscountStrategy = new PercentDiscountStrategy(percent);
}
diff --git a/src/test/java/com/prgmrs/voucher/repository/JdbcUserRepositoryTest.java b/src/test/java/com/prgmrs/voucher/repository/JdbcUserRepositoryTest.java
index 712ae5d3fb..62197cd6c3 100644
--- a/src/test/java/com/prgmrs/voucher/repository/JdbcUserRepositoryTest.java
+++ b/src/test/java/com/prgmrs/voucher/repository/JdbcUserRepositoryTest.java
@@ -8,7 +8,6 @@
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.Percent;
import com.prgmrs.voucher.model.wrapper.Username;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -51,10 +50,10 @@ class JdbcUserRepositoryTest {
@BeforeEach
void setUp() {
- uuidTyler = UUIDGenerator.generateUUID();
+ uuidTyler = UUID.randomUUID();
usernameTyler = new Username("tyler");
- uuidEmma = UUIDGenerator.generateUUID();
+ uuidEmma = UUID.randomUUID();
usernameEmma = new Username("emma");
UUID voucherUuid1 = UUID.randomUUID();
diff --git a/src/test/java/com/prgmrs/voucher/repository/JdbcVoucherRepositoryTest.java b/src/test/java/com/prgmrs/voucher/repository/JdbcVoucherRepositoryTest.java
index 43871f50bb..1b56767efb 100644
--- a/src/test/java/com/prgmrs/voucher/repository/JdbcVoucherRepositoryTest.java
+++ b/src/test/java/com/prgmrs/voucher/repository/JdbcVoucherRepositoryTest.java
@@ -8,7 +8,6 @@
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.Percent;
import com.prgmrs.voucher.model.wrapper.Username;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -53,15 +52,15 @@ class JdbcVoucherRepositoryTest {
@BeforeEach
void setUp() {
- voucherUuid1 = UUIDGenerator.generateUUID();
+ voucherUuid1 = UUID.randomUUID();
Amount amount = new Amount(500);
fixedAmountDiscountStrategy = new FixedAmountDiscountStrategy(amount);
- voucherUuid2 = UUIDGenerator.generateUUID();
+ voucherUuid2 = UUID.randomUUID();
Percent percent = new Percent(30);
percentDiscountStrategy = new PercentDiscountStrategy(percent);
- uuidTyler = UUIDGenerator.generateUUID();
+ uuidTyler = UUID.randomUUID();
usernameTyler = new Username("tyler");
userTyler = new User(uuidTyler, usernameTyler);
userRepository.save(userTyler);
diff --git a/src/test/java/com/prgmrs/voucher/repository/JdbcWalletRepositoryTest.java b/src/test/java/com/prgmrs/voucher/repository/JdbcWalletRepositoryTest.java
index e085ed6899..4bb5448545 100644
--- a/src/test/java/com/prgmrs/voucher/repository/JdbcWalletRepositoryTest.java
+++ b/src/test/java/com/prgmrs/voucher/repository/JdbcWalletRepositoryTest.java
@@ -6,7 +6,6 @@
import com.prgmrs.voucher.model.strategy.FixedAmountDiscountStrategy;
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.Username;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -45,10 +44,10 @@ class JdbcWalletRepositoryTest {
@BeforeEach
void setUp() {
- UUID uuidTyler = UUIDGenerator.generateUUID();
+ UUID uuidTyler = UUID.randomUUID();
userTyler = new User(uuidTyler, new Username("tyler"));
- UUID voucherUuid = UUIDGenerator.generateUUID();
+ UUID voucherUuid = UUID.randomUUID();
Amount amount = new Amount(500);
FixedAmountDiscountStrategy discountStrategy = new FixedAmountDiscountStrategy(amount);
voucherWithFixedAmountOf500 = new Voucher(voucherUuid, discountStrategy);
diff --git a/src/test/java/com/prgmrs/voucher/service/UserServiceTest.java b/src/test/java/com/prgmrs/voucher/service/UserServiceTest.java
index 8eb7d03312..081b018939 100644
--- a/src/test/java/com/prgmrs/voucher/service/UserServiceTest.java
+++ b/src/test/java/com/prgmrs/voucher/service/UserServiceTest.java
@@ -7,7 +7,6 @@
import com.prgmrs.voucher.model.User;
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.UserRepository;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -41,11 +40,11 @@ class UserServiceTest {
void setUp() {
MockitoAnnotations.openMocks(this);
- UUID userUuidTyler = UUIDGenerator.generateUUID();
+ UUID userUuidTyler = UUID.randomUUID();
Username usernameTyler = new Username("tyler");
userTyler = new User(userUuidTyler, usernameTyler);
- UUID userUuidEmma = UUIDGenerator.generateUUID();
+ UUID userUuidEmma = UUID.randomUUID();
Username usernameEmma = new Username("emma");
userEmma = new User(userUuidEmma, usernameEmma);
}
@@ -107,7 +106,7 @@ void GetUserListWithVoucherAssigned_NoParam_UserListResponseSameAsGivenUsers() {
@DisplayName("바우처 번호에 해당하는 유저를 조회한다.")
void GetUserByVoucherId_UserListRequest_UserResponseSameAsGivenUser() {
// Given
- UUID voucherUUID = UUIDGenerator.generateUUID();
+ UUID voucherUUID = UUID.randomUUID();
VoucherIdRequest voucherIdRequest = new VoucherIdRequest(voucherUUID.toString());
given(userRepository.getUserByVoucherId(voucherUUID)).willReturn(userTyler);
diff --git a/src/test/java/com/prgmrs/voucher/service/VoucherServiceTest.java b/src/test/java/com/prgmrs/voucher/service/VoucherServiceTest.java
index 9a4bff7a93..d416dd9cf8 100644
--- a/src/test/java/com/prgmrs/voucher/service/VoucherServiceTest.java
+++ b/src/test/java/com/prgmrs/voucher/service/VoucherServiceTest.java
@@ -12,7 +12,6 @@
import com.prgmrs.voucher.model.wrapper.Amount;
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.VoucherRepository;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -49,12 +48,12 @@ class VoucherServiceTest {
void setUp() {
MockitoAnnotations.openMocks(this);
- UUID voucherUuid1 = UUIDGenerator.generateUUID();
+ UUID voucherUuid1 = UUID.randomUUID();
Amount amount1 = new Amount(300);
FixedAmountDiscountStrategy discountStrategy1 = new FixedAmountDiscountStrategy(amount1);
voucherFixedAmountOf300 = new Voucher(voucherUuid1, discountStrategy1);
- UUID voucherUuid2 = UUIDGenerator.generateUUID();
+ UUID voucherUuid2 = UUID.randomUUID();
Amount amount2 = new Amount(200);
FixedAmountDiscountStrategy discountStrategy2 = new FixedAmountDiscountStrategy(amount2);
voucherFixedAmountOf200 = new Voucher(voucherUuid2, discountStrategy2);
diff --git a/src/test/java/com/prgmrs/voucher/service/WalletServiceTest.java b/src/test/java/com/prgmrs/voucher/service/WalletServiceTest.java
index 19f5c23abd..dd8da42b76 100644
--- a/src/test/java/com/prgmrs/voucher/service/WalletServiceTest.java
+++ b/src/test/java/com/prgmrs/voucher/service/WalletServiceTest.java
@@ -8,7 +8,6 @@
import com.prgmrs.voucher.model.wrapper.Username;
import com.prgmrs.voucher.repository.UserRepository;
import com.prgmrs.voucher.repository.WalletRepository;
-import com.prgmrs.voucher.util.UUIDGenerator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -44,9 +43,9 @@ class WalletServiceTest {
void setUp() {
MockitoAnnotations.openMocks(this);
- voucherUUID = UUIDGenerator.generateUUID();
+ voucherUUID = UUID.randomUUID();
- UUID userUUID = UUIDGenerator.generateUUID();
+ UUID userUUID = UUID.randomUUID();
username = new Username("tyler");
user = new User(userUUID, username);
}
diff --git a/src/test/resources/VoucherMgmtDDL-test.sql b/src/test/resources/VoucherMgmtDDL-test.sql
index f08d67a52e..fa3bc55b9f 100644
--- a/src/test/resources/VoucherMgmtDDL-test.sql
+++ b/src/test/resources/VoucherMgmtDDL-test.sql
@@ -19,7 +19,7 @@ CREATE TABLE `wallet`
(
`voucher_id` CHAR(36) NOT NULL,
`user_id` CHAR(36) NOT NULL,
- `assigned_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ `assigned_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`unassigned_time` TIMESTAMP,
`is_used` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (`voucher_id`, `user_id`, `assigned_time`),