───────┬────────────────────────────────────────────────────────────────────────
       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    
   5    import org.springframework.beans.factory.annotation.Autowired;
   6    import org.springframework.stereotype.Controller;
   7    import org.springframework.ui.Model;
   8    import org.springframework.validation.BindingResult;
   9    import org.springframework.validation.annotation.Validated;
  10    import org.springframework.web.bind.annotation.GetMapping;
  11    import org.springframework.web.bind.annotation.ModelAttribute;
  12    import org.springframework.web.bind.annotation.PathVariable;
  13    import org.springframework.web.bind.annotation.PostMapping;
  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, @ModelAttribute(name = "ToDoForm") ToDoForm form, Model model) {
  58            Member m = mService.getMember(mid);
  59            model.addAttribute("member", m);
  60            model.addAttribute("ToDoForm", form);
  61            List<ToDo> todos = tService.getToDoList(mid);
  62            model.addAttribute("todos", todos);
  63            List<ToDo> dones = tService.getDoneList(mid);
  64            model.addAttribute("dones", dones);
  65            return "list";
  66        }
  67    
  68        /**
  69         * 全員のToDoリストのページ
  70         */
  71        @GetMapping("/{mid}/todos/all")
  72        String showAllToDoList(@PathVariable String mid, Model model) {
  73            Member m = mService.getMember(mid);
  74            model.addAttribute("member", m);
  75            List<ToDo> todos = tService.getToDoList();
  76            model.addAttribute("todos", todos);
  77            List<ToDo> dones = tService.getDoneList();
  78            model.addAttribute("dones", dones);
  79            return "alllist";
  80        }
  81    
  82        /**
  83         * ToDoの作成.作成処理後,ユーザページへリダイレクト
  84         */
  85        @PostMapping("/{mid}/todos")
  86        String createToDo(@PathVariable String mid, @Validated @ModelAttribute(name = "ToDoForm") ToDoForm form,
  87                BindingResult bindingResult, Model model) {
  88            if (bindingResult.hasErrors()) {
  89                return showToDoList(mid, form, model);
  90            }
  91            tService.createToDo(mid, form);
  92            return "redirect:/" + mid + "/todos";
  93        }
  94    
  95        /**
  96         * ToDoの完了.完了処理後,ユーザページへリダイレクト
  97         */
  98        @GetMapping("/{mid}/todos/{seq}/done")
  99        String doneToDo(@PathVariable String mid, @PathVariable Long seq, Model model) {
 100            tService.done(mid, seq);
 101            return "redirect:/" + mid + "/todos";
 102        }
 103    
 104        /**
 105         * ToDoの完了のキャンセル.キャンセル終了後,ユーザページへリダイレクト
 106         */
 107        @GetMapping("/{mid}/todos/{seq}/cancel")
 108        String cancelToDo(@PathVariable String mid, @PathVariable Long seq, Model model) {
 109            tService.cancel(mid, seq);
 110            return "redirect:/" + mid + "/todos";
 111        }
 112    }
───────┴────────────────────────────────────────────────────────────────────────