───────┬──────────────────────────────────────────────────────────────────────── │ File: src/main//java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java ───────┼──────────────────────────────────────────────────────────────────────── 1 │ package jp.ac.kobe_u.cs.itspecialist.todoapp.controller; 2 │ 3 │ import java.util.List; 4 │ import java.util.Objects; 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.Controller; 10 │ import org.springframework.ui.Model; 11 │ import org.springframework.validation.BindingResult; 12 │ import org.springframework.validation.annotation.Validated; 13 │ import org.springframework.web.bind.annotation.*; 14 │ 15 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.LoginForm; 16 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.ToDoForm; 17 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.Member; 18 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.ToDo; 19 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.service.MemberService; 20 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.service.ToDoService; 21 │ 22 │ @Controller 23 │ public class ToDoController { 24 │ @Autowired 25 │ MemberService mService; 26 │ @Autowired 27 │ ToDoService tService; 28 │ 29 │ /** 30 │ * トップページ 31 │ */ 32 │ @GetMapping("/") 33 │ String showIndex(@ModelAttribute(name = "loginForm") LoginForm loginForm, Model model) { 34 │ //model.addAttribute("loginForm", loginForm); 35 │ return "index"; 36 │ } 37 │ 38 │ /** 39 │ * ログイン処理.midの存在確認をして,ユーザページにリダイレクト 40 │ */ 41 │ @PostMapping("/login") 42 │ String login(@Validated @ModelAttribute(name = "loginForm") LoginForm loginForm, BindingResult bindingResult, 43 │ Model model) { 44 │ 45 │ if (bindingResult.hasErrors()) { // バリデーション 46 │ return showIndex(loginForm, model); 47 │ } 48 │ 49 │ Member m = mService.getMember(loginForm.getMid()); // 存在チェック 50 │ return "redirect:/" + m.getMid() + "/todos"; 51 │ } 52 │ 53 │ /** 54 │ * ユーザのToDoリストのページ 55 │ */ 56 │ @GetMapping("/{mid}/todos") 57 │ String showToDoList(@PathVariable String mid, 58 │ @RequestParam(name="sort_by", required = false) String sortBy, 59 │ @RequestParam(name="order", required = false) String order, 60 │ @ModelAttribute(name = "ToDoForm") ToDoForm form, Model model, 61 │ Pageable pageable) { 62 │ Member m = mService.getMember(mid); 63 │ // デフォルト値を入れておく. 64 │ sortBy = getDefault(sortBy, "seq"); 65 │ order = getDefault(order, "asc"); 66 │ 67 │ model.addAttribute("member", m); 68 │ model.addAttribute("ToDoForm", form); 69 │ Page<ToDo> todos = tService.getToDoList(mid, sortBy, order, pageable); 70 │ model.addAttribute("todos", todos); 71 │ Page<ToDo> dones = tService.getDoneList(mid, sortBy, order, pageable); 72 │ model.addAttribute("dones", dones); 73 │ return "list"; 74 │ } 75 │ 76 │ private String getDefault(String value, String defaultValue) { 77 │ if(value == null || Objects.equals(value.trim(), "")) { 78 │ return defaultValue; 79 │ } 80 │ return value; 81 │ } 82 │ 83 │ /** 84 │ * 全員のToDoリストのページ 85 │ */ 86 │ @GetMapping("/{mid}/todos/all") 87 │ String showAllToDoList(@PathVariable String mid, 88 │ @RequestParam(name="sort_by", required = false) String sortBy, 89 │ @RequestParam(name="order", required = false) String order, 90 │ Model model, Pageable pageable) { 91 │ Member m = mService.getMember(mid); 92 │ // デフォルト値を入れておく. 93 │ sortBy = getDefault(sortBy, "seq"); 94 │ order = getDefault(order, "asc"); 95 │ model.addAttribute("member", m); 96 │ Page<ToDo> todos = tService.getToDoList(sortBy, order, pageable); 97 │ model.addAttribute("todos", todos); 98 │ Page<ToDo> dones = tService.getDoneList(sortBy, order, pageable); 99 │ model.addAttribute("dones", dones); 100 │ return "alllist"; 101 │ } 102 │ 103 │ /** 104 │ * ToDoの作成.作成処理後,ユーザページへリダイレクト 105 │ */ 106 │ @PostMapping("/{mid}/todos") 107 │ String createToDo(@PathVariable String mid, @Validated @ModelAttribute(name = "ToDoForm") ToDoForm form, 108 │ BindingResult bindingResult, Model model) { 109 │ if (!bindingResult.hasErrors()) { 110 │ tService.createToDo(mid, form); 111 │ } 112 │ return "redirect:/" + mid + "/todos"; 113 │ } 114 │ 115 │ /** 116 │ * ToDoの更新.期限を追加,削除する.その後,ユーザページへリダイレクトする. 117 │ */ 118 │ @PutMapping("/{mid}/todos/{seq}/due") 119 │ String updateDueDate(@PathVariable String mid, @PathVariable Long seq, 120 │ @Validated @ModelAttribute(name = "ToDoForm") ToDoForm form, Model model) { 121 │ tService.updateDueDate(mid, seq, form.getDueDate()); 122 │ return "redirect:/" + mid + "/todos"; 123 │ } 124 │ 125 │ /** 126 │ * ToDoの完了.完了処理後,ユーザページへリダイレクト 127 │ */ 128 │ @GetMapping("/{mid}/todos/{seq}/done") 129 │ String doneToDo(@PathVariable String mid, @PathVariable Long seq, Model model) { 130 │ tService.done(mid, seq); 131 │ return "redirect:/" + mid + "/todos"; 132 │ } 133 │ 134 │ /** 135 │ * ToDoの完了のキャンセル.キャンセル終了後,ユーザページへリダイレクト 136 │ */ 137 │ @GetMapping("/{mid}/todos/{seq}/cancel") 138 │ String cancelToDo(@PathVariable String mid, @PathVariable Long seq, Model model) { 139 │ tService.cancel(mid, seq); 140 │ return "redirect:/" + mid + "/todos"; 141 │ } 142 │ 143 │ /* 144 │ * 背景色の更新.更新終了後,ユーザページへリダイレクト. 145 │ */ 146 │ @PutMapping("/{mid}/todos/{seq}/background") 147 │ String updateBackground(@PathVariable String mid, @PathVariable Long seq, 148 │ @Validated @ModelAttribute(name="ToDoForm") ToDoForm form, Model model) { 149 │ tService.updateBackground(mid, seq, form.getBackground()); 150 │ return "redirect:/" + mid + "/todos"; 151 │ } 152 │ } ───────┴────────────────────────────────────────────────────────────────────────