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