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..82d8bed --- /dev/null +++ b/src/main/java/com/example/techeer_partners_api_session/controller/TaskController.java @@ -0,0 +1,84 @@ +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); + } + + @PutMapping("/{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..238601c --- /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/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