요구사항과 디자인 UI를 확인하면서 어떤 정보가 저장되야 하는지 확인해야한다.
Signup페이지를 확인해보고서 테이블을 설계해보자
@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class User extends Timestamped {
public User(String username, String password, String email, UserRole role) {
this.username = username;
this.password = password;
this.email = email;
this.role = role;
}
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
// 반드시 값을 가지도록 합니다.
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String email;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRole role;
}
이렇게 user테이블을 설계했는데 특별하게 UserRole에서는 enum이라는 값을 사용해서 USER나 ADMIN값만들어올수있게 되었다.
package com.sparta.springcore.dto;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SignupRequestDto {
private String username;
private String password;
private String email;
private boolean admin = false;
private String adminToken = "";
}
package com.sparta.springcore.controller;
import com.sparta.springcore.dto.SignupRequestDto;
import com.sparta.springcore.service.UserService;
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.PostMapping;
@Controller
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
// 회원 로그인 페이지
@GetMapping("/user/login")
public String login() {
return "login";
}
@GetMapping("/user/login/error")
public String loginError(Model model) {
model.addAttribute("loginError", true);
return "login";
}
// 회원 가입 페이지
@GetMapping("/user/signup")
public String signup() {
return "signup";
}
// 회원 가입 요청 처리
@PostMapping("/user/signup")
public String registerUser(SignupRequestDto requestDto) {
userService.registerUser(requestDto);
return "redirect:/";
}
}