diff --git a/README.md b/README.md index 814c665..aa35f38 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,5 @@ https://melodic-walleye-2ab.notion.site/Docker-Desktop-1395051bdea58049bcb9f9ebb # 과제 요구사항 https://melodic-walleye-2ab.notion.site/1395051bdea580f3855cf4d35803dd5f?pvs=4 + +# 11 / 27일 제출 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..def2f0c --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java @@ -0,0 +1,82 @@ +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.TaskUpdateDto; +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("/completed") + public ResponseEntity> getCompletedTasks() { + List completedTasks = taskService.getDoneTasks(); + + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "완료 된 일이 조회되었습니다."); + response.put("data", completedTasks); + + return ResponseEntity.ok(response); + } + + @GetMapping("/incompleted") + public ResponseEntity> getInCompletedTasks() { + List inCompletedTasks = taskService.getNotDoneTasks(); + + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message", "미완료 된 일이 조회되었습니다."); + response.put("data", inCompletedTasks); + + return ResponseEntity.ok(response); + } + + @PatchMapping("/{id}") + public ResponseEntity> updateTask(@PathVariable Long id, @RequestBody TaskUpdateDto dto) { + Task updateTask = taskService.updateTask(id, dto); + + Map response = new HashMap<>(); + response.put("status", "success"); + response.put("message" , "할 일이 수정되었습니다.."); + + return ResponseEntity.ok(response); + } + + @DeleteMapping("/{id}") + public ResponseEntity> delteTask(@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..8e892e4 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/dto/TaskRequestDto.java @@ -0,0 +1,19 @@ +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/TaskUpdateDto.java b/src/main/java/com/example/techeer_partners_api_session/dto/TaskUpdateDto.java new file mode 100644 index 0000000..73a0112 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/dto/TaskUpdateDto.java @@ -0,0 +1,23 @@ +package com.example.techeer_partners_api_session.dto; + +public class TaskUpdateDto { + private String title; + private Boolean isDone; + + public TaskUpdateDto() {} + + public String getTitle() { + return title; + } + public void setTitle(){ + this.title = title; + } + + public Boolean getIsDone() { + return isDone; + } + + public void setIsDone(Boolean isDone) { + this.isDone = 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..af19bda --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/entity/Task.java @@ -0,0 +1,42 @@ +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) + private String title; + + private boolean isDone = false; + + public Task() {} + + 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 boolean isDone() { + return isDone; + } + + public void setIsDone(Boolean isDone) { + this.isDone = 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..869e488 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/repository/TaskRepository.java @@ -0,0 +1,13 @@ +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; + +import java.util.List; + +@Repository +public interface TaskRepository extends JpaRepository { + List findByIsDoneTrue(); + List findByIsDoneFalse(); +} 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..2066780 --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/service/TaskService.java @@ -0,0 +1,55 @@ +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.TaskUpdateDto; +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; + + +@Service +public class TaskService { + private final 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 getDoneTasks() { + return taskRepository.findByIsDoneTrue(); + } + + public List getNotDoneTasks() { + return taskRepository.findByIsDoneFalse(); + } + + public Task updateTask(Long id, TaskUpdateDto dto) { + Task task = taskRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("해당 ID를 가진 할 일이 존재하지 않습니다." + id)); + + if (dto.getTitle() != null) { + task.setTitle(dto.getTitle()); + } + + if (dto.getIsDone() != null) { + task.setIsDone(dto.getIsDone()); + } + return taskRepository.save(task); + } + + public void deleteTask(Long id) { + Task task = taskRepository.findById(id).orElseThrow(() -> new RuntimeException("해당 ID를 가진 할 일이 존재하지 않습니다." + id)); + + taskRepository.delete(task); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c7ffb1a..b614188 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.sql.init.mode=always