───────┬──────────────────────────────────────────────────────────────────────── │ File: src/main//java/jp/ac/kobe_u/cs/itspecialist/todoapp/service/ToDoService.java ───────┼──────────────────────────────────────────────────────────────────────── 1 │ package jp.ac.kobe_u.cs.itspecialist.todoapp.service; 2 │ 3 │ import java.util.Date; 4 │ import java.util.List; 5 │ 6 │ import org.springframework.beans.factory.annotation.Autowired; 7 │ import org.springframework.stereotype.Service; 8 │ 9 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.ToDoForm; 10 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.ToDo; 11 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.exception.ToDoAppException; 12 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.repository.ToDoRepository; 13 │ 14 │ @Service 15 │ public class ToDoService { 16 │ @Autowired 17 │ MemberService mService; 18 │ @Autowired 19 │ ToDoRepository tRepo; 20 │ /** 21 │ * ToDoを作成する (C) 22 │ * @param mid 作成者 23 │ * @param form フォーム 24 │ * @return 25 │ */ 26 │ public ToDo createToDo(String mid, ToDoForm form) { 27 │ mService.getMember(mid); //実在メンバーか確認 28 │ ToDo todo = form.toEntity(); 29 │ todo.setMid(mid); 30 │ return tRepo.save(todo); 31 │ } 32 │ 33 │ /** 34 │ * ToDoを1つ取得する (R) 35 │ * @param seq 36 │ * @return 37 │ */ 38 │ public ToDo getToDo(Long seq) { 39 │ ToDo todo = tRepo.findById(seq).orElseThrow( 40 │ () -> new ToDoAppException(ToDoAppException.NO_SUCH_TODO_EXISTS, 41 │ seq + ": No such ToDo exists") 42 │ ); 43 │ return todo; 44 │ } 45 │ 46 │ /** 47 │ * あるメンバーのToDoリストを取得する (R) 48 │ * @param mid 49 │ * @return 50 │ */ 51 │ public List<ToDo> getToDoList(String mid) { 52 │ return tRepo.findByMidAndDone(mid, false); 53 │ } 54 │ /** 55 │ * あるメンバーのDoneリストを取得する (R) 56 │ * @param mid 57 │ * @return 58 │ */ 59 │ public List<ToDo> getDoneList(String mid) { 60 │ return tRepo.findByMidAndDone(mid, true); 61 │ } 62 │ 63 │ /** 64 │ * 全員のToDoリストを取得する (R) 65 │ * @return 66 │ */ 67 │ public List<ToDo> getToDoList() { 68 │ return tRepo.findByDone(false); 69 │ } 70 │ 71 │ /** 72 │ * 全員のDoneリストを取得する (R) 73 │ * @return 74 │ */ 75 │ public List<ToDo> getDoneList() { 76 │ return tRepo.findByDone(true); 77 │ } 78 │ 79 │ 80 │ /** 81 │ * ToDoを完了する 82 │ * @param mid 完了者 83 │ * @param seq 完了するToDoの番号 84 │ * @return 85 │ */ 86 │ public ToDo done(String mid, Long seq) { 87 │ ToDo todo = getToDo(seq); 88 │ //Doneの認可を確認する.他人のToDoを閉めたらダメ. 89 │ if (!mid.equals(todo.getMid())) { 90 │ throw new ToDoAppException(ToDoAppException.INVALID_TODO_OPERATION, mid 91 │ + ": Cannot done other's todo of " + todo.getMid()); 92 │ } 93 │ todo.setDone(true); 94 │ todo.setDoneAt(new Date()); 95 │ return tRepo.save(todo); 96 │ } 97 │ 98 │ /** 99 │ * ToDo の完了をキャンセルする. 100 │ * @param mid 完了者 101 │ * @param seq 完了をキャンセルするToDoの番号 102 │ * @return 103 │ */ 104 │ public ToDo cancel(String mid, Long seq) { 105 │ ToDo todo = getToDo(seq); 106 │ // Doneの認可を確認する.他人のToDoを閉めたらダメ. 107 │ if (!mid.equals(todo.getMid())) { 108 │ throw new ToDoAppException(ToDoAppException.INVALID_TODO_OPERATION, 109 │ mid + ": Cannot cancel other's todo of " + todo.getMid()); 110 │ } 111 │ todo.setDone(false); 112 │ todo.setDoneAt(null); 113 │ return tRepo.save(todo); 114 │ } 115 │ 116 │ /** 117 │ * ToDoを更新する 118 │ * @param mid 更新者 119 │ * @param seq 更新するToDo番号 120 │ * @param form 更新フォーム 121 │ * @return 122 │ */ 123 │ public ToDo updateToDo(String mid, Long seq, ToDoForm form) { 124 │ ToDo todo = getToDo(seq); 125 │ //Doneの認可を確認する.他人のToDoを更新したらダメ. 126 │ if (!mid.equals(todo.getMid())) { 127 │ throw new ToDoAppException(ToDoAppException.INVALID_TODO_OPERATION, mid 128 │ + ": Cannot update other's todo of " + todo.getMid()); 129 │ } 130 │ todo.setTitle(form.getTitle()); //タイトルを更新 131 │ return tRepo.save(todo); 132 │ } 133 │ 134 │ /** 135 │ * ToDoを削除する 136 │ * @param mid 削除者 137 │ * @param seq 削除するToDo番号 138 │ */ 139 │ public void deleteToDo(String mid, Long seq) { 140 │ ToDo todo = getToDo(seq); 141 │ //Doneの認可を確認する.他人のToDoを削除したらダメ. 142 │ if (!mid.equals(todo.getMid())) { 143 │ throw new ToDoAppException(ToDoAppException.INVALID_TODO_OPERATION, mid 144 │ + ": Cannot delete other's todo of " + todo.getMid()); 145 │ } 146 │ tRepo.deleteById(seq); 147 │ } 148 │ 149 │ 150 │ 151 │ } ───────┴────────────────────────────────────────────────────────────────────────