package com.example.controller;
import java.util.List;
import javax.servlet.http.HttpSession;
import com.example.entity.Member;
import com.example.service.MemberDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping(value = "/member")
public class MemberController {
// DB에 일을 수행하는 클래스
// 클래스명 obj = new 클래스명(); 을 아래처럼 쓰고 있음..
@Autowired
private MemberDB memberDB;
@Autowired
private HttpSession httpSession;
@GetMapping(value = "/login")
public String loginGET() {
return "member/login";
}
@PostMapping(value = "/login")
public String loginPOST(@ModelAttribute Member member, HttpSession httpSession) {
// DB에 아이디, 암호를 전달하여 일치하는 항목이 있는지 확인
Member retMember = memberDB.selectLogin(member);
System.out.println(retMember);
if (retMember != null) {
// 로그인되는 시점
// 세션: 서버에 기록되는 정보(어떤 주소, 어떤 컨트롤러에서 공유)
httpSession.setAttribute("USERID", retMember.getId());
httpSession.setAttribute("USERNAME", retMember.getName());
return "redirect:/home";
}
return "redirect:/member/login";
}
@GetMapping(value = "/logout")
public String loginGET(HttpSession httpSession) {
// 세션 완전 삭제
return "redirect:/home";
}
@GetMapping(value = "/mypage")
public String mypageGET(
Model model,
@RequestParam(name = "menu", defaultValue = "0") int menu) {
String userid = (String) httpSession.getAttribute("USERID");
if (userid == null) {
return "redirect:/member/login";
}
if (menu == 0) {
return "redirect:/member/mypage?menu=1";
}
if (menu == 1) {
Member member = memberDB.selectOneMember(userid);
model.addAttribute("title", "정보수정");
model.addAttribute("mem", member);
} else if (menu == 2) {
} else if (menu == 3) {
}
return "member/mypage";
}
@PostMapping(value = "/mypage")
public String mypagePOST(@RequestParam(name = "menu") int menu,
@ModelAttribute Member member) {
if (menu == 1) {
int ret = memberDB.updateMember(member);
if (ret == 1) {
httpSession.setAttribute("USERNAME", member.getName());
return "redirect:/member/mypage?menu=1";
}
return "redirect:/member/mypage?menu=1";
} else if (menu == 2) {
System.out.println(member.toString());
String userid = (String) httpSession.getAttribute("USERID");
member.setId(userid);
Long ret = memberDB.updateMemberPassword(member);
if (ret == 1L) {
return "redirect:/member/mypage?menu=2";
}
return "redirect:/member/mypage?menu=2";
} else if (menu == 3) {
String userid = (String) httpSession.getAttribute("USERID");
int ret = memberDB.deleteMember(userid);
if (ret == 1L) {
return "redirect:/member/mypage?menu=3";
}
return "redirect:/member/mypage?menu=3";
}
return "redirect:/home";
}
// 127.0.0.1:8080/member/delete?id=1
@GetMapping(value = "/delete")
public String deleteGET(@RequestParam(name = "id") String id) {
int ret = memberDB.deleteMember(id);
if (ret == 1) {
return "redirect:/member/selectlist";
}
return "redirect:/member/selectlist";
}
// 127.0.0.1:8080/member/selectlist
@GetMapping(value = "/selectlist")
public String selectlistGET(Model model,
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "text", defaultValue = "") String text) {
if (page == 0) {
return "redirect:/member/selectlist?page=1";
}
// 1. DB에서 목록 받아오기
List<Member> list = memberDB.selectListPageSearchMember(page, text);
long pages = memberDB.CountSearchMember(text);
// 2. jsp로 전달하기(jsp에서의 변수명, 실제 전송하는 값)
model.addAttribute("list", list);
model.addAttribute("pages", (pages - 1) / 10 + 1);
// 3. member폴더의 select.jsp를 표시하라
return "member/select";
}
@GetMapping(value = "/update")
public String updateGET(Model model, @RequestParam(name = "id") String id) {
Member member = memberDB.selectOneMember(id);
model.addAttribute("member", member);
return "member/update"; // 표시할 jsp 파일명. 확장자X
}
@PostMapping(value = "/update")
public String updatePOST(@ModelAttribute Member member) {
System.out.println(member.toString());
int ret = memberDB.updateMember(member);
if (ret == 1) {
return "redirect:/member/selectlist";
}
// post에서는 jsp표시 X
// redirect를 이용하여 주소 변경
return "redirect:/member/update?id=" + member.getId();
}
// 127.0.0.1:8080/member/insert
@GetMapping(value = "/insert")
public String insertGET() {
return "member/insert";
}
// post는 사용자가 입력한 내용이 전달되고 DB작업을 위해 필요한 시점
// jsp를 표시하는게 아니라 주소창에 입력 후 엔터를 침
@PostMapping(value = "/insert")
public String insertPOST(@ModelAttribute Member mem) {
System.out.println(mem.toString());
memberDB.insertMember(mem);
// 주소창에 /member/insert를 입력 후 엔터 누르는 것과 같음
return "redirect:/member/insert";
}
}