From 3a4ee869c32fde4d5f7b3ccd53897a0f3ce877e7 Mon Sep 17 00:00:00 2001 From: "jisu.email" Date: Wed, 20 Nov 2024 16:14:30 +0900 Subject: [PATCH 1/2] =?UTF-8?q?api=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TecheerPartnersApiSessionApplication.java | 1 - .../controller/TaskController.java | 88 +++++++++++++++++++ .../dto/TaskRequestDto.java | 20 +++++ .../dto/TaskResponseDto.java | 26 ++++++ .../entity/Task.java | 41 +++++++++ .../repository/TaskRepository.java | 9 ++ .../service/TaskService.java | 62 +++++++++++++ src/main/resources/application.properties | 1 + 8 files changed, 247 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java create mode 100644 src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java create mode 100644 src/main/java/com/example/techeer_partners_api_session/dto/TaskResponseDto.java create mode 100644 src/main/java/com/example/techeer_partners_api_session/entity/Task.java create mode 100644 src/main/java/com/example/techeer_partners_api_session/repository/TaskRepository.java create mode 100644 src/main/java/com/example/techeer_partners_api_session/service/TaskService.java diff --git a/src/main/java/com/example/techeer_partners_api_session/TecheerPartnersApiSessionApplication.java b/src/main/java/com/example/techeer_partners_api_session/TecheerPartnersApiSessionApplication.java index dd01199..c9b71e6 100644 --- a/src/main/java/com/example/techeer_partners_api_session/TecheerPartnersApiSessionApplication.java +++ b/src/main/java/com/example/techeer_partners_api_session/TecheerPartnersApiSessionApplication.java @@ -9,5 +9,4 @@ public class TecheerPartnersApiSessionApplication { public static void main(String[] args) { SpringApplication.run(TecheerPartnersApiSessionApplication.class, args); } - } diff --git a/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java new file mode 100644 index 0000000..9ed2cf9 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java @@ -0,0 +1,88 @@ +package com.example.techeer_partners_api_session.controller; + +import com.example.techeer_partners_api_session.dto.TaskRequestDto; +import com.example.techeer_partners_api_session.dto.TaskResponseDto; +import com.example.techeer_partners_api_session.entity.Task; +import com.example.techeer_partners_api_session.service.TaskService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/tasks") +public class TaskController { + + private final TaskService taskService; + + public TaskController(TaskService taskService) { + this.taskService = taskService; + } + + @PostMapping + public ResponseEntity> createTask(@RequestBody TaskRequestDto dto) { + taskService.createTask(dto); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "할 일이 성공적으로 생성되었습니다."); + return ResponseEntity.status(201).body(response); + } + + @GetMapping + public ResponseEntity> getAllTasks() { + List tasks = taskService.getAllTasks(); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "전체 할 일이 조회되었습니다."); + response.put("data", tasks); + return ResponseEntity.ok(response); + } + + @GetMapping("/completed") + public ResponseEntity> getCompletedTasks() { + List completeTasks = taskService.getCompletedTasks(); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "완료된 일이 조회되었습니다."); + response.put("data", completeTasks); + return ResponseEntity.ok(response); + } + + @GetMapping("/incomplete") + public ResponseEntity> getIncompleteTasks() { + List incompleteTasks = taskService.getIncompleteTasks(); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "미완료 된 일이 조회되었습니다."); + response.put("data", incompleteTasks); + return ResponseEntity.ok(response); + } + + + + @PatchMapping("/{id}") + public ResponseEntity> updateTask( + @PathVariable Long id, + @RequestBody TaskRequestDto dto + ) { + taskService.updateTask(id, dto); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "할 일이 수정되었습니다."); + return ResponseEntity.ok(response); + } + + @DeleteMapping("/{id}") + public ResponseEntity> deleteTask(@PathVariable Long id) { + taskService.deleteTask(id); + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "할 일이 삭제되었습니다."); + return ResponseEntity.ok(response); + } + + + +} diff --git a/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java b/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java new file mode 100644 index 0000000..935a99c --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java @@ -0,0 +1,20 @@ +package com.example.techeer_partners_api_session.dto; + +public class TaskRequestDto { + private final String title; + private final boolean isDone; + + + public TaskRequestDto(String title, boolean isDone) { + this.title = title; + this.isDone = isDone; + } + + public String getTitle() { + return title; + } + + public boolean isDone() { + return isDone; + } +} diff --git a/src/main/java/com/example/techeer_partners_api_session/dto/TaskResponseDto.java b/src/main/java/com/example/techeer_partners_api_session/dto/TaskResponseDto.java new file mode 100644 index 0000000..067e688 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/dto/TaskResponseDto.java @@ -0,0 +1,26 @@ +package com.example.techeer_partners_api_session.dto; + +public class TaskResponseDto { + private Long id; + private String title; + private boolean isDone; + + public TaskResponseDto(Long id, String title, boolean isDone) { + this.id = id; + this.title = title; + this.isDone = isDone; + } + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public boolean isDone() { + return isDone; + } +} + diff --git a/src/main/java/com/example/techeer_partners_api_session/entity/Task.java b/src/main/java/com/example/techeer_partners_api_session/entity/Task.java new file mode 100644 index 0000000..1026b24 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/entity/Task.java @@ -0,0 +1,41 @@ +package com.example.techeer_partners_api_session.entity; + +import jakarta.persistence.*; + +@Entity +public class Task { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 생성 + private Long id; + + @Column(nullable = false) // null 허용X + private String title; + + private boolean isDone = false; + + public Task() {} // JPA가 entity에 접근하기 위해 기본 생성자 필수 + + public Task(String title) { + this.title = title; + } + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setDone(boolean done) { + isDone = done; + } + + public boolean isDone() { + return isDone; + } +} diff --git a/src/main/java/com/example/techeer_partners_api_session/repository/TaskRepository.java b/src/main/java/com/example/techeer_partners_api_session/repository/TaskRepository.java new file mode 100644 index 0000000..1e5d914 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/repository/TaskRepository.java @@ -0,0 +1,9 @@ +package com.example.techeer_partners_api_session.repository; + +import com.example.techeer_partners_api_session.entity.Task; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TaskRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/techeer_partners_api_session/service/TaskService.java b/src/main/java/com/example/techeer_partners_api_session/service/TaskService.java new file mode 100644 index 0000000..6b32478 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/service/TaskService.java @@ -0,0 +1,62 @@ +package com.example.techeer_partners_api_session.service; + +import com.example.techeer_partners_api_session.dto.TaskRequestDto; +import com.example.techeer_partners_api_session.dto.TaskResponseDto; +import com.example.techeer_partners_api_session.entity.Task; +import com.example.techeer_partners_api_session.repository.TaskRepository; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class TaskService { + + private TaskRepository taskRepository; + + public TaskService(TaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + public void createTask(TaskRequestDto dto) { + Task task = new Task(dto.getTitle()); + taskRepository.save(task); + } + + public List getAllTasks() { + return taskRepository.findAll(); + } + + public List getCompletedTasks() { + return taskRepository.findAll().stream() + .filter(task -> task.isDone()) // 완료된 항목 필터링 + .map(task -> new TaskResponseDto(task.getId(), task.getTitle(), task.isDone())) // Task -> TaskResponseDto 변환 + .collect(Collectors.toList()); + } + + public List getIncompleteTasks() { + return taskRepository.findAll().stream() + .filter(task -> !task.isDone()) // 완료되지 않은 항목 필터링 + .map(task -> new TaskResponseDto(task.getId(), task.getTitle(), task.isDone())) // Task -> TaskResponseDto 변환 + .collect(Collectors.toList()); + } + + + + public void updateTask(Long id, TaskRequestDto dto) { + Task task = taskRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Task not found")); + task.setTitle(dto.getTitle()); + task.setDone(dto.isDone()); + taskRepository.save(task); + } + + public void deleteTask(Long id) { + if (!taskRepository.existsById(id)) { + throw new IllegalArgumentException("Task not found"); + } + taskRepository.deleteById(id); + } + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c7ffb1a..57f7c62 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,3 +8,4 @@ spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true spring.h2.console.path=/h2-console +spring.jpa.hibernate.ddl-auto=create From f125105e9e5b59dccce35e8c677b4562b1ee5658 Mon Sep 17 00:00:00 2001 From: jisu Date: Sat, 23 Nov 2024 20:33:33 +0900 Subject: [PATCH 2/2] =?UTF-8?q?patch=EB=A7=A4=ED=95=91=20->=20put=EB=A7=A4?= =?UTF-8?q?=ED=95=91=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TaskController.java | 6 +----- .../techeer_partners_api_session/dto/TaskRequestDto.java | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java index 9ed2cf9..82d8bed 100644 --- a/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java +++ b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java @@ -60,9 +60,7 @@ public ResponseEntity> getIncompleteTasks() { return ResponseEntity.ok(response); } - - - @PatchMapping("/{id}") + @PutMapping("/{id}") public ResponseEntity> updateTask( @PathVariable Long id, @RequestBody TaskRequestDto dto @@ -83,6 +81,4 @@ public ResponseEntity> deleteTask(@PathVariable Long id) { return ResponseEntity.ok(response); } - - } diff --git a/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java b/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java index 935a99c..238601c 100644 --- a/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java +++ b/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java @@ -4,7 +4,6 @@ public class TaskRequestDto { private final String title; private final boolean isDone; - public TaskRequestDto(String title, boolean isDone) { this.title = title; this.isDone = isDone;