diff --git a/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java b/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java index 6b20956..50da302 100644 --- a/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java +++ b/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java @@ -100,4 +100,13 @@ public class ToDoController { tService.done(mid, seq); return "redirect:/" + mid + "/todos"; } + + /** + * ToDoの完了のキャンセル.キャンセル終了後,ユーザページへリダイレクト + */ + @GetMapping("/{mid}/todos/{seq}/cancel") + String cancelToDo(@PathVariable String mid, @PathVariable Long seq, Model model) { + tService.cancel(mid, seq); + return "redirect:/" + mid + "/todos"; + } } diff --git a/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/service/ToDoService.java b/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/service/ToDoService.java index 57a6371..b01756d 100644 --- a/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/service/ToDoService.java +++ b/src/main/java/jp/ac/kobe_u/cs/itspecialist/todoapp/service/ToDoService.java @@ -95,6 +95,24 @@ public class ToDoService { return tRepo.save(todo); } + /** + * ToDo の完了をキャンセルする. + * @param mid 完了者 + * @param seq 完了をキャンセルするToDoの番号 + * @return + */ + public ToDo cancel(String mid, Long seq) { + ToDo todo = getToDo(seq); + // Doneの認可を確認する.他人のToDoを閉めたらダメ. + if (!mid.equals(todo.getMid())) { + throw new ToDoAppException(ToDoAppException.INVALID_TODO_OPERATION, + mid + ": Cannot cancel other's todo of " + todo.getMid()); + } + todo.setDone(false); + todo.setDoneAt(null); + return tRepo.save(todo); + } + /** * ToDoを更新する * @param mid 更新者 diff --git a/src/main/resources/templates/list.html b/src/main/resources/templates/list.html index a2939b9..0800ae1 100644 --- a/src/main/resources/templates/list.html +++ b/src/main/resources/templates/list.html @@ -49,12 +49,14 @@ <th>タイトル</th> <th>作成日時</th> <th>完了日時</th> + <th>コマンド</th> </tr> <tr th:each="done: ${dones}"> <td>[[${done.seq}]]</td> <td>[[${done.title}]]</td> <td>[[${done.createdAt}]]</td> <td>[[${done.doneAt}]]</td> + <td><a th:href="@{/{mid}/todos/{seq}/cancel(mid=${member.mid},seq=${done.seq})}">キャンセル</a></td> </tr> </table>