diff --git a/src/main/java/com/dev/voucherproject/controller/web/VoucherJsonApiController.java b/src/main/java/com/dev/voucherproject/controller/web/VoucherJsonApiController.java new file mode 100644 index 0000000000..7ddf656b55 --- /dev/null +++ b/src/main/java/com/dev/voucherproject/controller/web/VoucherJsonApiController.java @@ -0,0 +1,73 @@ +package com.dev.voucherproject.controller.web; + + +import com.dev.voucherproject.controller.web.request.VoucherCreateRequest; +import com.dev.voucherproject.controller.web.response.Response; +import com.dev.voucherproject.model.service.VoucherService; +import com.dev.voucherproject.model.voucher.VoucherDto; +import com.dev.voucherproject.model.voucher.VoucherPolicy; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.net.URI; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping(value = "/api/v1/vouchers", produces = MediaType.APPLICATION_JSON_VALUE) +public class VoucherJsonApiController { + private final VoucherService voucherService; + + public VoucherJsonApiController(VoucherService voucherService) { + this.voucherService = voucherService; + } + + @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> create(@RequestBody VoucherCreateRequest voucherCreateRequest) { + String id = voucherService.insert(voucherCreateRequest); + + return ResponseEntity.created(URI.create("/api/v1/vouchers/"+id)) + .body(Response.success(id)); + } + + @GetMapping + public ResponseEntity>> vouchers(@RequestParam("voucherPolicy") Optional voucherPolicy) { + List voucherDtos = voucherService.findAllVouchersAppliedQueryString(voucherPolicy); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @GetMapping("/date") + public ResponseEntity>> betweenDatesCreatedVouchers( + @RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate + ) { + List voucherDtos = voucherService.findAllBetweenDates(startDate, endDate); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @GetMapping("/{id}") + public ResponseEntity> voucher(@PathVariable String id) { + VoucherDto voucherDtos = voucherService.findById(id); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @DeleteMapping("/{id}") + public ResponseEntity> delete(@PathVariable String id) { + voucherService.deleteById(id); + + return ResponseEntity.ok() + .body(Response.success(id)); + } +} diff --git a/src/main/java/com/dev/voucherproject/controller/web/VoucherXmlApiController.java b/src/main/java/com/dev/voucherproject/controller/web/VoucherXmlApiController.java new file mode 100644 index 0000000000..a854e9f514 --- /dev/null +++ b/src/main/java/com/dev/voucherproject/controller/web/VoucherXmlApiController.java @@ -0,0 +1,71 @@ +package com.dev.voucherproject.controller.web; + + +import com.dev.voucherproject.controller.web.request.VoucherCreateRequest; +import com.dev.voucherproject.controller.web.response.Response; +import com.dev.voucherproject.model.service.VoucherService; +import com.dev.voucherproject.model.voucher.VoucherDto; +import com.dev.voucherproject.model.voucher.VoucherPolicy; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.net.URI; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping(value = "/api/v1/vouchers", produces = MediaType.APPLICATION_ATOM_XML_VALUE) +public class VoucherXmlApiController { + private final VoucherService voucherService; + + public VoucherXmlApiController(VoucherService voucherService) { + this.voucherService = voucherService; + } + + @PostMapping(consumes = MediaType.APPLICATION_ATOM_XML_VALUE) + public ResponseEntity> create(@RequestBody VoucherCreateRequest voucherCreateRequest) { + String id = voucherService.insert(voucherCreateRequest); + + return ResponseEntity.created(URI.create("/api/v1/vouchers/"+id)) + .body(Response.success(id)); + } + + @GetMapping + public ResponseEntity>> vouchers(@RequestParam("voucherPolicy") Optional voucherPolicy) { + List voucherDtos = voucherService.findAllVouchersAppliedQueryString(voucherPolicy); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @GetMapping("/date") + public ResponseEntity>> betweenDatesCreatedVouchers( + @RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate + ) { + List voucherDtos = voucherService.findAllBetweenDates(startDate, endDate); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @GetMapping("/{id}") + public ResponseEntity> voucher(@PathVariable String id) { + VoucherDto voucherDtos = voucherService.findById(id); + + return ResponseEntity.ok() + .body(Response.success(voucherDtos)); + } + + @DeleteMapping("/{id}") + public ResponseEntity> delete(@PathVariable String id) { + voucherService.deleteById(id); + + return ResponseEntity.ok() + .body(Response.success(id)); + } +} diff --git a/src/main/java/com/dev/voucherproject/controller/web/config/WebConfig.java b/src/main/java/com/dev/voucherproject/controller/web/config/WebConfig.java index 4ede5a6f04..7bb130a369 100644 --- a/src/main/java/com/dev/voucherproject/controller/web/config/WebConfig.java +++ b/src/main/java/com/dev/voucherproject/controller/web/config/WebConfig.java @@ -5,11 +5,19 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.HiddenHttpMethodFilter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry + .addMapping("/**") + .allowedOrigins("http://localhost:3000"); + } @Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter(){ return new HiddenHttpMethodFilter(); diff --git a/src/main/java/com/dev/voucherproject/model/service/VoucherService.java b/src/main/java/com/dev/voucherproject/model/service/VoucherService.java index e4ff93d49a..b52b210f89 100644 --- a/src/main/java/com/dev/voucherproject/model/service/VoucherService.java +++ b/src/main/java/com/dev/voucherproject/model/service/VoucherService.java @@ -12,6 +12,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import java.util.UUID; @Service @@ -24,14 +25,26 @@ public VoucherService(VoucherDao voucherDao) { } @Transactional - public void insert(VoucherCreateRequest voucherCreateRequest) { + public String insert(VoucherCreateRequest voucherCreateRequest) { + UUID uuid = UUID.randomUUID(); + Voucher voucher = Voucher.of( - UUID.randomUUID(), + uuid, LocalDateTime.now(), voucherCreateRequest.voucherPolicy(), voucherCreateRequest.discountFigure() ); voucherDao.insert(voucher); + + return uuid.toString(); + } + + public List findAllVouchersAppliedQueryString(Optional voucherPolicy) { + if (voucherPolicy.isEmpty()) { + return findAllVouchers(); + } + + return findAllVouchersByPolicy(voucherPolicy.get()); } public List findAllVouchers() {