OSDN Git Service

色々追加
authortkskjri05 <t.kujirai@nagatake.co.jp>
Sat, 1 May 2021 17:12:39 +0000 (02:12 +0900)
committertkskjri05 <t.kujirai@nagatake.co.jp>
Sat, 1 May 2021 17:12:39 +0000 (02:12 +0900)
14 files changed:
build.gradle
src/main/java/com/example/domain/TodoHeaderInfo.java [moved from src/main/java/com/example/data/TodoHeaderInfo.java with 86% similarity]
src/main/java/com/example/domain/TodoListInfo.java [new file with mode: 0644]
src/main/java/com/example/dto/TodoHeaderDto.java [new file with mode: 0644]
src/main/java/com/example/dto/TodoListDto.java [new file with mode: 0644]
src/main/java/com/example/logic/TodoLogic.java [new file with mode: 0644]
src/main/java/com/example/mapper/TodoHeaderMapper.java
src/main/java/com/example/mapper/TodoListMapper.java [new file with mode: 0644]
src/main/java/com/example/rest/ErrorAdvisor.java [new file with mode: 0644]
src/main/java/com/example/rest/SampleRestController.java
src/main/java/com/example/rest/TodoRestController.java [new file with mode: 0644]
src/main/java/com/example/service/TodoHeaderService.java [deleted file]
src/main/java/com/example/service/TodoService.java [new file with mode: 0644]
src/main/resources/application.properties

index 1a18832..3097345 100644 (file)
@@ -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 {
@@ -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;\r
+\r
+import lombok.AllArgsConstructor;\r
+import lombok.Builder;\r
+import lombok.Getter;\r
+import lombok.NoArgsConstructor;\r
+import lombok.Setter;\r
+\r
+@NoArgsConstructor\r
+@Builder\r
+@AllArgsConstructor\r
+public class TodoHeaderInfo {\r
+       @Getter\r
+       @Setter\r
+       private Integer id;\r
+       @Getter\r
+       @Setter\r
+       private String name;\r
+}\r
diff --git a/src/main/java/com/example/domain/TodoListInfo.java b/src/main/java/com/example/domain/TodoListInfo.java
new file mode 100644 (file)
index 0000000..7bdcc18
--- /dev/null
@@ -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 (file)
index 0000000..f2baed5
--- /dev/null
@@ -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 (file)
index 0000000..db15f00
--- /dev/null
@@ -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 (file)
index 0000000..5ab0afd
--- /dev/null
@@ -0,0 +1,59 @@
+package com.example.logic;\r
+\r
+import java.util.List;\r
+import java.util.stream.Collectors;\r
+\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.util.ObjectUtils;\r
+\r
+import com.example.domain.TodoHeaderInfo;\r
+import com.example.domain.TodoListInfo;\r
+import com.example.dto.TodoHeaderDto;\r
+import com.example.dto.TodoListDto;\r
+import com.example.mapper.TodoHeaderMapper;\r
+import com.example.mapper.TodoListMapper;\r
+\r
+@Component\r
+public class TodoLogic {\r
+       @Autowired\r
+       private TodoHeaderMapper todoHeaderMapper;\r
+       @Autowired\r
+       private TodoListMapper todoListMapper;\r
+\r
+       public List<TodoHeaderInfo> findTodoHeaders() {\r
+               return toTodoHeaderInfo(todoHeaderMapper.findTodoHeaders());\r
+       }\r
+       \r
+       private List<TodoHeaderInfo> toTodoHeaderInfo(List<TodoHeaderDto> list) {\r
+               return list.stream().map(this::toTodoHeaderInfo).collect(Collectors.toList());\r
+       }\r
+       \r
+       private TodoHeaderInfo toTodoHeaderInfo(TodoHeaderDto dto) {\r
+               return TodoHeaderInfo.builder()\r
+                               .id(dto.getId())\r
+                               .name(dto.getName()).build();\r
+       }\r
+       \r
+       public List<TodoListInfo> findTodoLists(String headerId) {\r
+               if(ObjectUtils.isEmpty(headerId)) {\r
+                       throw new RuntimeException("headerId is Empty!");\r
+               }\r
+               return toTodoListInfo(todoListMapper.findTodoLists(Integer.valueOf(headerId)));\r
+       }\r
+       \r
+       private List<TodoListInfo> toTodoListInfo(List<TodoListDto> list) {\r
+               return list.stream().map(this::toTodoListInfo).collect(Collectors.toList());\r
+       }\r
+       \r
+       private TodoListInfo toTodoListInfo(TodoListDto dto) {\r
+               return TodoListInfo.builder()\r
+                               .id(dto.getId())\r
+                               .headerId(dto.getHeaderId())\r
+                               .done(dto.getDone())\r
+                               .created(dto.getCreated())\r
+                               .updated(dto.getUpdated())\r
+                               .name(dto.getName())\r
+                               .build();\r
+       }\r
+}\r
index afee1de..e0f7393 100644 (file)
@@ -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({ "<script>",
                        " select",
-                       "  id",
-                       "  , name",
+                       "     id",
+                       "     , name",
                        " from",
-                       "  todo_header ",
+                       "     todo_header ",
+                       " order by ",
+                       "     id",
                        "</script>" })
-       List<TodoHeaderInfo> findTodoHeaders();
+       List<TodoHeaderDto> 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 (file)
index 0000000..66d2fbe
--- /dev/null
@@ -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({ "<script>",
+                       " select",
+                       "     header_id",
+                       "     , id",
+                       "     , name",
+                       "     , done",
+                       "     , created",
+                       "     , updated",
+                       " from",
+                       "     todo_list ",
+                       " where",
+                       "     header_id = #{headerId}",
+                       " order by ",
+                       "     id",
+                       "</script>" })
+       List<TodoListDto> 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 (file)
index 0000000..b89ab26
--- /dev/null
@@ -0,0 +1,50 @@
+package com.example.rest;\r
+\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.web.bind.annotation.ControllerAdvice;\r
+import org.springframework.web.bind.annotation.ExceptionHandler;\r
+\r
+import com.google.gson.Gson;\r
+\r
+@ControllerAdvice\r
+public class ErrorAdvisor {\r
+\r
+       @ExceptionHandler(Throwable.class)\r
+    public ResponseEntity<String> exceptionHandler(Exception e) {\r
+               ApiResponse apiResponse = new ApiResponse();\r
+               apiResponse.setErrorMessage(e.getMessage());\r
+               apiResponse.setStatusNg();\r
+               HttpHeaders headers = new HttpHeaders();\r
+               headers.setContentType(MediaType.APPLICATION_JSON);\r
+               String responseJson = new Gson().toJson(apiResponse);\r
+               return new ResponseEntity<String>(responseJson, headers, HttpStatus.valueOf(500));\r
+    }\r
+       \r
+       public static class ApiResponse{\r
+       public enum ApiStatus {\r
+               OK, NG\r
+       }\r
+       private String status = ApiStatus.OK.toString();\r
+       private String errorMessage;\r
+       public int version = 1;\r
+\r
+               public String getStatus() {\r
+                       return status;\r
+               }\r
+               public void setStatusOk(){\r
+                       status = ApiStatus.OK.toString();\r
+               }\r
+               public void setStatusNg(){\r
+                       status = ApiStatus.NG.toString();\r
+               }\r
+               public String getErrorMessage() {\r
+                       return errorMessage;\r
+               }\r
+               public void setErrorMessage(String errorMessage) {\r
+                       this.errorMessage = errorMessage;\r
+               }\r
+    }\r
+}\r
index 617abc3..a431a2f 100644 (file)
@@ -7,8 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;\r
 import org.springframework.web.bind.annotation.RestController;\r
 \r
-import com.example.data.TodoHeaderInfo;\r
-import com.example.service.TodoHeaderService;\r
+import com.example.service.TodoService;\r
 import com.google.common.collect.Lists;\r
 \r
 \r
@@ -16,7 +15,7 @@ import com.google.common.collect.Lists;
 public class SampleRestController {\r
        \r
        @Autowired\r
-       TodoHeaderService todoHeaderService;\r
+       TodoService todoHeaderService;\r
        \r
        @RequestMapping(value = "/test")\r
        @ResponseBody\r
@@ -26,10 +25,4 @@ public class SampleRestController {
                list.add("array2");\r
                return list;\r
        }\r
-       \r
-       @RequestMapping(value = "/dbTest")\r
-       @ResponseBody\r
-       public List<TodoHeaderInfo> dbTest() {\r
-               return todoHeaderService.findTodoHeaders();\r
-       }\r
 }\r
diff --git a/src/main/java/com/example/rest/TodoRestController.java b/src/main/java/com/example/rest/TodoRestController.java
new file mode 100644 (file)
index 0000000..3a670f2
--- /dev/null
@@ -0,0 +1,41 @@
+package com.example.rest;\r
+\r
+import java.util.List;\r
+\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RequestMethod;\r
+import org.springframework.web.bind.annotation.RequestParam;\r
+import org.springframework.web.bind.annotation.ResponseBody;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+import com.example.domain.TodoHeaderInfo;\r
+import com.example.domain.TodoListInfo;\r
+import com.example.service.TodoService;\r
+\r
+\r
+@RestController\r
+public class TodoRestController {\r
+       \r
+       @Autowired\r
+       TodoService todoHeaderService;\r
+       \r
+       @RequestMapping(value = "/findHeaders")\r
+       @ResponseBody\r
+       public List<TodoHeaderInfo> findHeaders() {\r
+               return todoHeaderService.findTodoHeaders();\r
+       }\r
+       \r
+       @RequestMapping(value = "/findLists", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE , produces = MediaType.APPLICATION_JSON_VALUE)\r
+       @ResponseBody\r
+       public List<TodoListInfo> findLists(@RequestParam(name = "headerId") String headerId) {\r
+               return todoHeaderService.findTodoLists(headerId);\r
+       }\r
+       \r
+       @RequestMapping(value = "/getLists", method = RequestMethod.GET)\r
+       @ResponseBody\r
+       public List<TodoListInfo> getLists(@RequestParam(name = "headerId") String headerId) {\r
+               return todoHeaderService.findTodoLists(headerId);\r
+       }\r
+}\r
diff --git a/src/main/java/com/example/service/TodoHeaderService.java b/src/main/java/com/example/service/TodoHeaderService.java
deleted file mode 100644 (file)
index e845a52..0000000
+++ /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<TodoHeaderInfo> 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 (file)
index 0000000..f658401
--- /dev/null
@@ -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<TodoHeaderInfo> findTodoHeaders() {
+               return todoHeaderLogic.findTodoHeaders();
+       }
+       
+       public List<TodoListInfo> findTodoLists(String headerId) {
+               return todoHeaderLogic.findTodoLists(headerId);
+       }
+}
index e3b2988..6698abf 100644 (file)
@@ -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