package com.example.member;
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.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import jakarta.servlet.http.HttpSession;
@Controller
public class MemberController {
@Autowired
private MemberRepository memberRepository;
@GetMapping("/")
public String home(HttpSession session, Model model) {
String loginId = (String) session.getAttribute("loginId");
if (loginId == null) {
return "redirect:/login";
}
model.addAttribute("loginId", loginId);
return "home";
}
@GetMapping("/login")
public String loginForm() {
return "login";
}
@PostMapping("/login")
public String login(@RequestParam(name = "id") String id, @RequestParam(name = "password") String password,
HttpSession session, Model model) {
Member member = memberRepository.findByLogin(id, password);
if (member == null) {
model.addAttribute("error", "아이디 또는 비밀번호가 틀렸습니다.");
return "login";
}
session.setAttribute("loginId", member.getId());
session.setAttribute("loginName", member.getName());
session.setAttribute("role", member.getRole());
return "home";
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
@GetMapping("/register")
public String registerForm() {
return "register";
}
@PostMapping("/register")
public String register(@RequestParam(name = "id") String id, @RequestParam(name = "password") String password,
@RequestParam(name = "name") String name, @RequestParam(name = "email", required = false) String email) {
memberRepository.register(id, password, name, email);
return "redirect:/login";
}
@GetMapping("/members")
public String memberList(HttpSession session, Model model) {
if (!"ADMIN".equals(session.getAttribute("role"))) {
return "redirect:/login";
}
model.addAttribute("members", memberRepository.findAll());
return "members";
}
@GetMapping("/members/{id}/edit")
public String editForm(@PathVariable(name = "id") String id, HttpSession session, Model model) {
if (!"ADMIN".equals(session.getAttribute("role"))) {
return "redirect:/login";
}
Member member = memberRepository.findById(id).orElse(null);
if (member == null) {
return "redirect:/members";
}
model.addAttribute("member", member);
return "edit";
}
@PostMapping("/members/edit")
public String update(@RequestParam(name = "id") String id, @RequestParam(name = "name") String name,
@RequestParam(name = "email") String email, @RequestParam(name = "role") String role, HttpSession session) {
if (!"ADMIN".equals(session.getAttribute("role"))) {
return "redirect:/login";
}
Member member = memberRepository.findById(id).orElse(null);
if (member != null) {
member.setName(name);
member.setEmail(email);
member.setRole(role);
memberRepository.save(member);
}
return "redirect:/members";
}
@PostMapping("/members/delete")
public String delete(@RequestParam(name = "id") String id, HttpSession session) {
if (!"ADMIN".equals(session.getAttribute("role"))) {
return "redirect:/login";
}
memberRepository.deleteById(id);
return "redirect:/members";
}
}