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