@Transactional
public CreateUserResponse createUser(CreateUserRequest request) {
User savedUser = userRepository.save( new User(
request.getUserName(), request.getEmail(), request.getPassword()));
return new CreateUserResponse(
savedUser.getId(),
savedUser.getUserName(),
savedUser.getEmail(),
savedUser.getCreateDate(),
savedUser.getModifiedDate()
);
}

getCreateDate, getModifiedDate 모두 Null인 상황
@SpringBootApplication
public class SchdeduledevelopApplication {
public static void main(String[] args) {
SpringApplication.run(SchdeduledevelopApplication.class, args);
}
}
스프링 main에 @EnableJpaAuditing 이 빠져있었음

Json으로 보내지 않고 text 타입으로 보냈음
@Getter
public class CreateUserRequest {
@NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
@Size(min = 2, max = 20, message = "사용자 이름은 2~20 글자까지 입력 가능합니다.")
private String userName;
@NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
@Email(message = "이메일 형식이 아닙니다.")
@Max(value = 50, message = "이메일은 최대 50 글자까지 입력 가능합니다.")
private String email;
@NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
@Max(value = 50, message = "패스워드는 최대 50 글자까지 입력 가능합니다.")
private String password;
}
Max가 최대값을 의미하는 줄 알았음
@Size(min = 4, max = 50) 형식으로 변경
@Transactional
public CreateUserResponse createUser(CreateUserRequest request) {
User savedUser = userRepository.save( new User(
request.getUserName(), request.getEmail(), passwordEncoder.encode(request.getPassword())));
return new CreateUserResponse(
savedUser.getId(),
savedUser.getUserName(),
savedUser.getEmail(),
savedUser.getCreateDate(),
savedUser.getModifiedDate()
);
}
@Transactional(readOnly = true)
public LoginUserForSession userLogin(LoginUserRequest request) {
System.out.println(passwordEncoder.encode(request.getPassword()));
User user = userRepository.findByEmailAndPassword(
request.getEmail(), passwordEncoder.encode(request.getPassword())).orElseThrow(
() -> new LoginFailureException("email 또는 password가 틀렸습니다.")
);
return new LoginUserForSession(user.getId(), user.getUserName());
}
encode() 를 하면 값이 같을 경우 항상 같은 해시 값을 주는것으로 오해했음
할때마다 결과가 달리지기 때문에 단순히 DB에 저장된것 decode하고 나서
입력값의 password를 match로 비교해야 됐음
@Getter
@Entity
@Table(name = "comments")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Comment extends CommonEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String comment;
@ManyToOne
@JoinColumn(name = "schedule_id")
private Schedule schedule;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
public Comment(String comment, Schedule schedule, User user) {
this.comment = comment;
this.schedule = schedule;
this.user = user;
}
public void updateComment(String comment) {
this.comment = comment;
}
}
댓글 엔티티를 만들었는데 get생성일, get수정일이 나오지 않음
@Getter는 잘 있고 다른 엔티티들의 생성일, 수정일은 아무 문제 없었음
그런데 Auditing 의 클래스 이름이 CommonEntity가 아니라 BaseEntity 였음
CommonEntity는 패스워드 암호화를 위해 만들었던 클래스임
클래스 이름이 명확하지 않았던것이 문제라
다음 프로젝트에는 공통 클래스 이름을 조금 더 명확하게 할 필요가 있어보임