───────┬────────────────────────────────────────────────────────────────────────
       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.data.domain.Page;
   7    import org.springframework.data.domain.Pageable;
   8    import org.springframework.stereotype.Controller;
   9    import org.springframework.ui.Model;
  10    import org.springframework.validation.BindingResult;
  11    import org.springframework.validation.annotation.Validated;
  12    import org.springframework.web.bind.annotation.GetMapping;
  13    import org.springframework.web.bind.annotation.ModelAttribute;
  14    import org.springframework.web.bind.annotation.PathVariable;
  15    import org.springframework.web.bind.annotation.PostMapping;
  16    
  17    import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.LoginForm;
  18    import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.ToDoForm;
  19    import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.Member;
  20    import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.ToDo;
  21    import jp.ac.kobe_u.cs.itspecialist.todoapp.service.MemberService;
  22    import jp.ac.kobe_u.cs.itspecialist.todoapp.service.ToDoService;
  23    
  24    @Controller
  25    public class ToDoController {
  26        @Autowired
  27        MemberService mService;
  28        @Autowired
  29        ToDoService tService;
  30    
  31        /**
  32         * トップページ
  33         */
  34        @GetMapping("/")
  35        String showIndex(@ModelAttribute(name = "loginForm") LoginForm loginForm, Model model) {
  36            //model.addAttribute("loginForm", loginForm);
  37            return "index";
  38        }
  39    
  40        /**
  41         * ログイン処理.midの存在確認をして,ユーザページにリダイレクト
  42         */
  43        @PostMapping("/login")
  44        String login(@Validated @ModelAttribute(name = "loginForm") LoginForm loginForm, BindingResult bindingResult,
  45                Model model) {
  46    
  47            if (bindingResult.hasErrors()) { // バリデーション
  48                return showIndex(loginForm, model);
  49            }
  50    
  51            Member m = mService.getMember(loginForm.getMid()); // 存在チェック
  52            return "redirect:/" + m.getMid() + "/todos";
  53        }
  54    
  55        /**
  56         * ユーザのToDoリストのページ
  57         */
  58        @GetMapping("/{mid}/todos")
  59        String showToDoList(@PathVariable String mid, @ModelAttribute(name = "ToDoForm") ToDoForm form,
  60                            Model model, Pageable pageable) {
  61            Member m = mService.getMember(mid);
  62            model.addAttribute("member", m);
  63            model.addAttribute("ToDoForm", form);
  64            Page<ToDo> todos = tService.getToDoList(mid, pageable);
  65            model.addAttribute("todos", todos);
  66            Page<ToDo> dones = tService.getDoneList(mid, pageable);
  67            model.addAttribute("dones", dones);
  68            return "list";
  69        }
  70    
  71        /**
  72         * 全員のToDoリストのページ
  73         */
  74        @GetMapping("/{mid}/todos/all")
  75        String showAllToDoList(@PathVariable String mid, Model model, Pageable pageable) {
  76            Member m = mService.getMember(mid);
  77            model.addAttribute("member", m);
  78            Page<ToDo> todos = tService.getToDoList(pageable);
  79            model.addAttribute("todos", todos);
  80            Page<ToDo> dones = tService.getDoneList(pageable);
  81            model.addAttribute("dones", dones);
  82            return "alllist";
  83        }
  84    
  85        /**
  86         * ToDoの作成.作成処理後,ユーザページへリダイレクト
  87         */
  88        @PostMapping("/{mid}/todos")
  89        String createToDo(@PathVariable String mid, @Validated @ModelAttribute(name = "ToDoForm") ToDoForm form,
  90                BindingResult bindingResult, Model model) {
  91            if (!bindingResult.hasErrors()) {
  92                tService.createToDo(mid, form);
  93            }
  94            return "redirect:/" + mid + "/todos";
  95        }
  96    
  97        /**
  98         * ToDoの完了.完了処理後,ユーザページへリダイレクト
  99         */
 100        @GetMapping("/{mid}/todos/{seq}/done")
 101        String doneToDo(@PathVariable String mid, @PathVariable Long seq, Model model) {
 102            tService.done(mid, seq);
 103            return "redirect:/" + mid + "/todos";
 104        }
 105    }
───────┴────────────────────────────────────────────────────────────────────────