SettingsController.java
@GetMapping(SETTINGS_NOTIFICATIONS_URL)
public String updateNotificationsForm(@CurrentUser Account account, Model model) {
model.addAttribute(account);
model.addAttribute(new Notifications(account));
return SETTINGS_NOTIFICATIONS_VIEW_NAME;
}
account 를 보여주고,
form을 채울 객체인 Notifications 안에는 Notifications 타입을 만들었음. 여기서는 account에 들어있는 정보를 맵핑해서 사용하고 있다.
nullpointException 이 발생할 수 있으므로 @NoArgsConstructor 꼭 붙여주기!
package com.yuri.studyolle.domain;
import lombok.*;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
@Entity
@Getter @Setter @EqualsAndHashCode(of = "id") // id만 사용하도록 함
@Builder @AllArgsConstructor @NoArgsConstructor
public class Account {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String email;
@Column(unique = true)
private String nickname;
private String password;
private boolean emailVerified;
private String emailCheckToken; // 이메일을 검색할 때 사용할 토큰값을 db에 저장해놓고 매치하는지 확인하기 위해
private LocalDateTime emailCheckTokenGeneratedAt;
private LocalDateTime joinedAt; // 인증이 된 사용자를 그제야 가입될 수 있도록!
private String bio;
private String url;
private String occupation; // 직업
private String location;
@Lob @Basic(fetch = FetchType.EAGER)
private String profileImage;
private boolean studyCreatedByEmail; // study가 만들어졌다는 것을 이메일로 받을 것인지
private boolean studyCreatedByWeb = true; // ... 웹으로 받을 것인지
private boolean studyEnrollmentResultByEmail; // 가입 신청 결과를 이메일로 받을 것인지
private boolean studyEnrollmentResultByWeb = true;
private boolean studyUpdatedByEmail; // study에 대한 업데이트를 이메일로 받을 것인지
private boolean studyUpdatedByWeb = true;
public void generateEmailCheckToken() {
this.emailCheckToken = UUID.randomUUID().toString();
this.emailCheckTokenGeneratedAt = LocalDateTime.now();
}
public void completeSignUp() {
this.emailVerified = true;
this.joinedAt = LocalDateTime.now();
}
public boolean isValidToken(String token) {
return this.emailCheckToken.equals(token);
}
public boolean canSendConfirmEmail() {
return this.emailCheckTokenGeneratedAt.isBefore(LocalDateTime.now().minusHours(1));
}
}
웹으로 받는 것을 ture로 입력하였음 ~
정말로 관심있는 알림이 아닌 이상 웹으로만 받고, 이메일은 false로..
AccountService.java
public void updateNotifications(Account account, Notifications notifications) {
account.setMeetCreatedByWeb(notifications.isMeetCreatedByWeb());
account.setMeetCreatedByEmail(notifications.isMeetCreatedByEmail());
account.setMeetUpdatedByEmail(notifications.isMeetUpdatedByEmail());
account.setMeetUpdatedByWeb(notifications.isMeetUpdatedByWeb());
account.setMeetEnrollmentResultByEmail(notifications.isMeetEnrollmentResultByEmail());
account.setMeetEnrollmentResultByWeb(notifications.isMeetEnrollmentResultByWeb());
}
왜 도대체 객체가 저장이 안되나 싶었는데 알고보니 가장 중요한 코드를 빼먹음..🙄🙄🙄🙄🙄🙄
accountRepository.save(account);
근데 왜 .. 첫번째 값 true 해제되는 겨,,,,,
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발