From 9f5db904bc1f5875abe196a4deb36ba0f59c3564 Mon Sep 17 00:00:00 2001 From: tkskjri05 Date: Sun, 2 May 2021 02:12:39 +0900 Subject: [PATCH] =?utf8?q?=E8=89=B2=E3=80=85=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 + .../example/{data => domain}/TodoHeaderInfo.java | 38 +++++++------- src/main/java/com/example/domain/TodoListInfo.java | 33 ++++++++++++ src/main/java/com/example/dto/TodoHeaderDto.java | 19 +++++++ src/main/java/com/example/dto/TodoListDto.java | 33 ++++++++++++ src/main/java/com/example/logic/TodoLogic.java | 59 ++++++++++++++++++++++ .../java/com/example/mapper/TodoHeaderMapper.java | 13 ++--- .../java/com/example/mapper/TodoListMapper.java | 29 +++++++++++ src/main/java/com/example/rest/ErrorAdvisor.java | 50 ++++++++++++++++++ .../com/example/rest/SampleRestController.java | 11 +--- .../java/com/example/rest/TodoRestController.java | 41 +++++++++++++++ .../com/example/service/TodoHeaderService.java | 19 ------- src/main/java/com/example/service/TodoService.java | 24 +++++++++ src/main/resources/application.properties | 3 ++ 14 files changed, 321 insertions(+), 53 deletions(-) rename src/main/java/com/example/{data => domain}/TodoHeaderInfo.java (86%) create mode 100644 src/main/java/com/example/domain/TodoListInfo.java create mode 100644 src/main/java/com/example/dto/TodoHeaderDto.java create mode 100644 src/main/java/com/example/dto/TodoListDto.java create mode 100644 src/main/java/com/example/logic/TodoLogic.java create mode 100644 src/main/java/com/example/mapper/TodoListMapper.java create mode 100644 src/main/java/com/example/rest/ErrorAdvisor.java create mode 100644 src/main/java/com/example/rest/TodoRestController.java delete mode 100644 src/main/java/com/example/service/TodoHeaderService.java create mode 100644 src/main/java/com/example/service/TodoService.java diff --git a/build.gradle b/build.gradle index 1a18832..3097345 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,8 @@ dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.4.5' implementation group: 'com.google.guava', name: 'guava', version: '30.1.1-jre' compileOnly 'org.projectlombok:lombok:1.18.20' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' + developmentOnly 'org.springframework.boot:spring-boot-devtools' // hotdeploy } test { diff --git a/src/main/java/com/example/data/TodoHeaderInfo.java b/src/main/java/com/example/domain/TodoHeaderInfo.java similarity index 86% rename from src/main/java/com/example/data/TodoHeaderInfo.java rename to src/main/java/com/example/domain/TodoHeaderInfo.java index e0b1bbb..fe41ff2 100644 --- a/src/main/java/com/example/data/TodoHeaderInfo.java +++ b/src/main/java/com/example/domain/TodoHeaderInfo.java @@ -1,19 +1,19 @@ -package com.example.data; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Builder -@AllArgsConstructor -public class TodoHeaderInfo { - @Getter - @Setter - private Integer id; - @Getter - @Setter - private String name; -} +package com.example.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Builder +@AllArgsConstructor +public class TodoHeaderInfo { + @Getter + @Setter + private Integer id; + @Getter + @Setter + private String name; +} diff --git a/src/main/java/com/example/domain/TodoListInfo.java b/src/main/java/com/example/domain/TodoListInfo.java new file mode 100644 index 0000000..7bdcc18 --- /dev/null +++ b/src/main/java/com/example/domain/TodoListInfo.java @@ -0,0 +1,33 @@ +package com.example.domain; + +import java.sql.Timestamp; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Builder +@AllArgsConstructor +public class TodoListInfo { + @Getter + @Setter + private Integer id; + @Getter + @Setter + private Integer headerId; + @Getter + @Setter + private String name; + @Getter + @Setter + private Boolean done; + @Getter + @Setter + private Timestamp created; + @Getter + @Setter + private Timestamp updated; +} \ No newline at end of file diff --git a/src/main/java/com/example/dto/TodoHeaderDto.java b/src/main/java/com/example/dto/TodoHeaderDto.java new file mode 100644 index 0000000..f2baed5 --- /dev/null +++ b/src/main/java/com/example/dto/TodoHeaderDto.java @@ -0,0 +1,19 @@ +package com.example.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Builder +@AllArgsConstructor +public class TodoHeaderDto { + @Getter + @Setter + private Integer id; + @Getter + @Setter + private String name; +} diff --git a/src/main/java/com/example/dto/TodoListDto.java b/src/main/java/com/example/dto/TodoListDto.java new file mode 100644 index 0000000..db15f00 --- /dev/null +++ b/src/main/java/com/example/dto/TodoListDto.java @@ -0,0 +1,33 @@ +package com.example.dto; + +import java.sql.Timestamp; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Builder +@AllArgsConstructor +public class TodoListDto { + @Getter + @Setter + private Integer id; + @Getter + @Setter + private Integer headerId; + @Getter + @Setter + private String name; + @Getter + @Setter + private Boolean done; + @Getter + @Setter + private Timestamp created; + @Getter + @Setter + private Timestamp updated; +} \ No newline at end of file diff --git a/src/main/java/com/example/logic/TodoLogic.java b/src/main/java/com/example/logic/TodoLogic.java new file mode 100644 index 0000000..5ab0afd --- /dev/null +++ b/src/main/java/com/example/logic/TodoLogic.java @@ -0,0 +1,59 @@ +package com.example.logic; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import com.example.domain.TodoHeaderInfo; +import com.example.domain.TodoListInfo; +import com.example.dto.TodoHeaderDto; +import com.example.dto.TodoListDto; +import com.example.mapper.TodoHeaderMapper; +import com.example.mapper.TodoListMapper; + +@Component +public class TodoLogic { + @Autowired + private TodoHeaderMapper todoHeaderMapper; + @Autowired + private TodoListMapper todoListMapper; + + public List findTodoHeaders() { + return toTodoHeaderInfo(todoHeaderMapper.findTodoHeaders()); + } + + private List toTodoHeaderInfo(List list) { + return list.stream().map(this::toTodoHeaderInfo).collect(Collectors.toList()); + } + + private TodoHeaderInfo toTodoHeaderInfo(TodoHeaderDto dto) { + return TodoHeaderInfo.builder() + .id(dto.getId()) + .name(dto.getName()).build(); + } + + public List findTodoLists(String headerId) { + if(ObjectUtils.isEmpty(headerId)) { + throw new RuntimeException("headerId is Empty!"); + } + return toTodoListInfo(todoListMapper.findTodoLists(Integer.valueOf(headerId))); + } + + private List toTodoListInfo(List list) { + return list.stream().map(this::toTodoListInfo).collect(Collectors.toList()); + } + + private TodoListInfo toTodoListInfo(TodoListDto dto) { + return TodoListInfo.builder() + .id(dto.getId()) + .headerId(dto.getHeaderId()) + .done(dto.getDone()) + .created(dto.getCreated()) + .updated(dto.getUpdated()) + .name(dto.getName()) + .build(); + } +} diff --git a/src/main/java/com/example/mapper/TodoHeaderMapper.java b/src/main/java/com/example/mapper/TodoHeaderMapper.java index afee1de..e0f7393 100644 --- a/src/main/java/com/example/mapper/TodoHeaderMapper.java +++ b/src/main/java/com/example/mapper/TodoHeaderMapper.java @@ -5,17 +5,18 @@ import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; -import com.example.data.TodoHeaderInfo; +import com.example.dto.TodoHeaderDto; @Mapper public interface TodoHeaderMapper { - @Select({ "" }) - List findTodoHeaders(); + List findTodoHeaders(); } diff --git a/src/main/java/com/example/mapper/TodoListMapper.java b/src/main/java/com/example/mapper/TodoListMapper.java new file mode 100644 index 0000000..66d2fbe --- /dev/null +++ b/src/main/java/com/example/mapper/TodoListMapper.java @@ -0,0 +1,29 @@ +package com.example.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import com.example.dto.TodoListDto; + +@Mapper +public interface TodoListMapper { + @Select({ "" }) + List findTodoLists(@Param("headerId") Integer headerId); +} \ No newline at end of file diff --git a/src/main/java/com/example/rest/ErrorAdvisor.java b/src/main/java/com/example/rest/ErrorAdvisor.java new file mode 100644 index 0000000..b89ab26 --- /dev/null +++ b/src/main/java/com/example/rest/ErrorAdvisor.java @@ -0,0 +1,50 @@ +package com.example.rest; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import com.google.gson.Gson; + +@ControllerAdvice +public class ErrorAdvisor { + + @ExceptionHandler(Throwable.class) + public ResponseEntity exceptionHandler(Exception e) { + ApiResponse apiResponse = new ApiResponse(); + apiResponse.setErrorMessage(e.getMessage()); + apiResponse.setStatusNg(); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String responseJson = new Gson().toJson(apiResponse); + return new ResponseEntity(responseJson, headers, HttpStatus.valueOf(500)); + } + + public static class ApiResponse{ + public enum ApiStatus { + OK, NG + } + private String status = ApiStatus.OK.toString(); + private String errorMessage; + public int version = 1; + + public String getStatus() { + return status; + } + public void setStatusOk(){ + status = ApiStatus.OK.toString(); + } + public void setStatusNg(){ + status = ApiStatus.NG.toString(); + } + public String getErrorMessage() { + return errorMessage; + } + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + } +} diff --git a/src/main/java/com/example/rest/SampleRestController.java b/src/main/java/com/example/rest/SampleRestController.java index 617abc3..a431a2f 100644 --- a/src/main/java/com/example/rest/SampleRestController.java +++ b/src/main/java/com/example/rest/SampleRestController.java @@ -7,8 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -import com.example.data.TodoHeaderInfo; -import com.example.service.TodoHeaderService; +import com.example.service.TodoService; import com.google.common.collect.Lists; @@ -16,7 +15,7 @@ import com.google.common.collect.Lists; public class SampleRestController { @Autowired - TodoHeaderService todoHeaderService; + TodoService todoHeaderService; @RequestMapping(value = "/test") @ResponseBody @@ -26,10 +25,4 @@ public class SampleRestController { list.add("array2"); return list; } - - @RequestMapping(value = "/dbTest") - @ResponseBody - public List dbTest() { - return todoHeaderService.findTodoHeaders(); - } } diff --git a/src/main/java/com/example/rest/TodoRestController.java b/src/main/java/com/example/rest/TodoRestController.java new file mode 100644 index 0000000..3a670f2 --- /dev/null +++ b/src/main/java/com/example/rest/TodoRestController.java @@ -0,0 +1,41 @@ +package com.example.rest; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.example.domain.TodoHeaderInfo; +import com.example.domain.TodoListInfo; +import com.example.service.TodoService; + + +@RestController +public class TodoRestController { + + @Autowired + TodoService todoHeaderService; + + @RequestMapping(value = "/findHeaders") + @ResponseBody + public List findHeaders() { + return todoHeaderService.findTodoHeaders(); + } + + @RequestMapping(value = "/findLists", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE , produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List findLists(@RequestParam(name = "headerId") String headerId) { + return todoHeaderService.findTodoLists(headerId); + } + + @RequestMapping(value = "/getLists", method = RequestMethod.GET) + @ResponseBody + public List getLists(@RequestParam(name = "headerId") String headerId) { + return todoHeaderService.findTodoLists(headerId); + } +} diff --git a/src/main/java/com/example/service/TodoHeaderService.java b/src/main/java/com/example/service/TodoHeaderService.java deleted file mode 100644 index e845a52..0000000 --- a/src/main/java/com/example/service/TodoHeaderService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.service; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.example.data.TodoHeaderInfo; -import com.example.mapper.TodoHeaderMapper; - -@Service -public class TodoHeaderService { - @Autowired - private TodoHeaderMapper todoHeaderMapper; - - public List findTodoHeaders() { - return todoHeaderMapper.findTodoHeaders(); - } -} diff --git a/src/main/java/com/example/service/TodoService.java b/src/main/java/com/example/service/TodoService.java new file mode 100644 index 0000000..f658401 --- /dev/null +++ b/src/main/java/com/example/service/TodoService.java @@ -0,0 +1,24 @@ +package com.example.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.domain.TodoHeaderInfo; +import com.example.domain.TodoListInfo; +import com.example.logic.TodoLogic; + +@Service +public class TodoService { + @Autowired + private TodoLogic todoHeaderLogic; + + public List findTodoHeaders() { + return todoHeaderLogic.findTodoHeaders(); + } + + public List findTodoLists(String headerId) { + return todoHeaderLogic.findTodoLists(headerId); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e3b2988..6698abf 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,9 @@ server.port=19080 server.servlet.context-path=/todo +spring.devtools.remote.restart.enabled=true +spring.devtools.livereload.enabled=true + spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres -- 2.11.0