@Getter
@NoArgsConstructor
public class MemberModel {
private Long id;
private String nickname;
private String email;
private String phone;
private String socialId;
private LocalDate birth;
private String address;
private MemberStatus status;
private Membership membership;
private Provider provider;
public static MemberModel of(MemberCreateRequest request) {
MemberModel memberModel = new MemberModel();
memberModel.nickname = request.getRandomNickname();
memberModel.email = request.getEmail();
memberModel.birth = request.getBirth();
memberModel.phone = request.getPhone();
memberModel.address = request.getAddress();
memberModel.status = MemberStatus.ACTIVE;
memberModel.membership = Membership.SILVER;
memberModel.socialId = null;
memberModel.provider = null;
return memberModel;
}
public static MemberModel of(AuthUserProfile profile, String nickname, String phone, LocalDate birth, String address, Provider provider) {
MemberModel memberModel = new MemberModel();
memberModel.nickname = nickname;
memberModel.email = profile.getEmail();
memberModel.phone = phone;
memberModel.birth = birth;
memberModel.address = address;
memberModel.status = MemberStatus.ACTIVE;
memberModel.membership = Membership.SILVER;
memberModel.socialId = profile.getSocialId();
memberModel.provider = provider;
return memberModel;
}
public static MemberModel of(Member member) {
MemberModel memberModel = new MemberModel();
memberModel.id = member.getId();
memberModel.nickname = member.getNickname();
memberModel.email = member.getEmail();
memberModel.birth = member.getBirth();
memberModel.phone = member.getPhone();
memberModel.address = member.getAddress();
memberModel.socialId = member.getSocialId();
memberModel.provider = member.getProvider();
return memberModel;
}
public MemberResponse toResponse() {
return MemberResponse.builder()
.id(id)
.nickname(nickname)
.email(email)
.phone(phone)
.birth(birth)
.address(address)
.membership(membership)
.socialId(socialId)
.provider(provider)
.build();
}
public Member toEntity() {
return Member.builder()
.id(id)
.nickname(nickname)
.email(email)
.phone(phone)
.birth(birth)
.address(address)
.status(status)
.membership(membership)
.socialId(socialId)
.provider(provider)
.build();
}
}
List<SocialUser> 이런식으로 두는데
이것은 List안은 Entity로 받기 때문에 jpa를 사용할 때, 문제가 생기게 된다. MemberModel에서 SocialUser라는 Entity에 접근을하면 SocialUser는 Member Entity와 연관관계가 있어서 SocialUser를 저장할때 Member에 중복되는 유저가 생길 수 있기 때문이다.
@Getter
@Entity(name = "member")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Member extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<SocialMember> socialMembers = new ArrayList<>();
@Column(name = "nickname")
private String nickname;
@Column(name = "email")
private String email;
@Column(name = "phone")
private String phone;
@DateTimeFormat(pattern = "yyyy/MM/dd")
@Column(name = "birth")
private LocalDate birth;
@Column(name = "address")
private String address;
@Column(name = "password")
private String password;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private MemberStatus status;
@Enumerated(EnumType.STRING)
@Column(name = "membership")
private Membership membership;
public void changeNickname(String newNickname) {
this.nickname = newNickname;
}
public void deleteMember() {
this.status = MemberStatus.DELETED;
}
public void linkExistSocialMember(SocialMemberRepository repository, String social) {
SocialMember exist = repository.findBySocialAndMember_Email(social, email);
exist.setMember(this);
socialMembers.add(exist);
repository.save(exist);
}
public MemberResponse toResponse() {
MemberResponse memberResponse = MemberResponse
.builder()
.id(this.id)
.nickname(this.nickname)
.email(this.email)
.phone(this.phone)
.birth(this.birth)
.address(this.address)
.membership(this.membership)
.socialMembers(this.socialMembers)
.build();
return memberResponse;
}
public static Member of(AuthSignupRequest request, AuthUserProfile userProfile) {
Member member = Member
.builder()
.nickname(request.getRandomNickname())
.email(userProfile.getEmail())
.phone(request.getPhone())
.birth(request.getBirth())
.address(request.getAddress())
.password(request.getPassword())
.status(MemberStatus.ACTIVE)
.membership(Membership.BRONZE)
.socialMembers(new ArrayList<>())
.build();
SocialMember socialMember = SocialMember.of(userProfile.getSocialId(), request.getProvider(), member);
member.getSocialMembers().add(socialMember);
return member;
}
public static Member of(MemberCreateRequest request) {
return Member
.builder()
.nickname(request.getRandomNickname())
.email(request.getEmail())
.phone(request.getPhone())
.birth(request.getBirth())
.address(request.getAddress())
.status(MemberStatus.ACTIVE)
.membership(Membership.BRONZE)
.password(request.getPassword())
.build();
}
}