Skip to content

Commit ce89fa5

Browse files
committed
add undo delete feature
1 parent 9b426fb commit ce89fa5

3 files changed

Lines changed: 33 additions & 15 deletions

File tree

src/main/java/com/taskmanagerapi/controller/TaskController.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public ResponseEntity<Task> searchTaskByName(@PathVariable String name) {
5151
}
5252

5353
@GetMapping("/tasks/search/status/{status}")
54-
public ResponseEntity<List<Task>> searchTaskByStatus(@PathVariable TaskStatus status){
54+
public ResponseEntity<List<Task>> searchTaskByStatus(@PathVariable TaskStatus status) {
5555
List<Task> tasks = taskService.searchTaskByStatus(status);
5656
return ResponseEntity.ok(tasks);
5757
}
@@ -69,4 +69,11 @@ public ResponseEntity<Task> deleteTask(@PathVariable String id) {
6969
.map(ResponseEntity::ok)
7070
.orElse(ResponseEntity.notFound().build());
7171
}
72+
73+
@PatchMapping("/tasks/{id}")
74+
public ResponseEntity<Task> undoDelete(@PathVariable String id) {
75+
return taskService.undoDelete(id)
76+
.map(ResponseEntity::ok)
77+
.orElse(ResponseEntity.notFound().build());
78+
}
7279
}

src/main/java/com/taskmanagerapi/repository/TaskRepository.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ public void save(Task task) {
1717
taskStore.put(task.getId(), task);
1818
}
1919

20-
public List<Task> findAllTasks() {
21-
return new ArrayList<>(taskStore.values());
22-
}
20+
public List<Task> findAllTasks() {
21+
return new ArrayList<>(taskStore.values());
22+
}
2323

2424
public Optional<Task> findTaskById(String id) {
2525
return Optional.ofNullable(taskStore.get(id));
2626
}
2727

28-
public Optional<Task> findTaskByName(String name){
28+
public Optional<Task> findTaskByName(String name) {
2929
return taskStore.values().stream()
30-
.filter(task -> task.getName().equals(name))
31-
.findFirst();
30+
.filter(task -> task.getName().equals(name))
31+
.findFirst();
3232
}
3333

3434
public List<Task> findTasksByStatus(TaskStatus status) {
@@ -37,8 +37,7 @@ public List<Task> findTasksByStatus(TaskStatus status) {
3737
.toList();
3838
}
3939

40-
41-
public void delete(String id){
40+
public void delete(String id) {
4241
taskStore.remove(id);
4342
}
4443
}

src/main/java/com/taskmanagerapi/service/TaskService.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
import java.util.List;
1111
import java.util.Optional;
1212

13-
import static com.taskmanagerapi.model.TaskStatus.DELETED;
14-
import static com.taskmanagerapi.model.TaskStatus.DONE;
13+
import static com.taskmanagerapi.model.TaskStatus.*;
1514

1615
@Service
1716
public class TaskService {
@@ -33,11 +32,11 @@ public Optional<Task> getTask(String id) {
3332
return taskRepository.findTaskById(id);
3433
}
3534

36-
public Optional<Task> searchTaskByName(String name){
35+
public Optional<Task> searchTaskByName(String name) {
3736
return taskRepository.findTaskByName(name);
3837
}
3938

40-
public List<Task> searchTaskByStatus(TaskStatus status){
39+
public List<Task> searchTaskByStatus(TaskStatus status) {
4140
return taskRepository.findTasksByStatus(status);
4241
}
4342

@@ -52,11 +51,24 @@ public Optional<Task> completeTask(String id) {
5251
public Optional<Task> deleteTask(String id) {
5352
return taskRepository.findTaskById(id).map(task -> {
5453
if (task.getStatus() == DELETED) {
55-
logger.info("Task {} is already deleted", task.getName());
54+
logger.info("Task '{}' is already deleted", task.getName());
5655
} else {
5756
task.setStatus(DELETED); // soft delete
5857
taskRepository.save(task);
59-
logger.info("Task {} marked as DELETED", task.getName());
58+
logger.info("Task '{}' has been deleted", task.getName());
59+
}
60+
return task;
61+
});
62+
}
63+
64+
public Optional<Task> undoDelete(String id) {
65+
return taskRepository.findTaskById(id).map(task -> {
66+
if (task.getStatus() == DELETED) {
67+
task.setStatus(CREATED);
68+
taskRepository.save(task);
69+
logger.info("Task '{}' reactivated", task.getName());
70+
} else {
71+
logger.info("Task '{}' could not be reactivated", task.getName());
6072
}
6173
return task;
6274
});

0 commit comments

Comments
 (0)