Skip to content

Commit

Permalink
♻️ [Refactor/member-12] member 도메인 기본 리펙토링 (#17)
Browse files Browse the repository at this point in the history
* ♻️ 롬복 추가

* ♻️ 도메인 리펙토링 진행

* ♻️ common 기능 구현

* ♻️ Member 도메인 작업 진행
  • Loading branch information
DongGeon0908 authored Dec 30, 2021
1 parent 5e9ab76 commit bc01f99
Show file tree
Hide file tree
Showing 19 changed files with 187 additions and 288 deletions.
33 changes: 23 additions & 10 deletions src/main/java/kr/ac/hs/oing/auth/SecurityUtils.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,45 @@
package kr.ac.hs.oing.auth;

import java.util.Objects;
import kr.ac.hs.oing.error.ErrorMessage;
import kr.ac.hs.oing.error.exception.NonExitsException;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Optional;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SecurityUtils {

private SecurityUtils() {
}

public static Optional<String> getCurrentUsername() {
public static String getCurrentUsername() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

isNullAuthentication(authentication);

if (authentication.getPrincipal() instanceof UserDetails) {
UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal();
return Optional.ofNullable(springSecurityUser.getUsername());

isNullSpringSecurityUser(springSecurityUser);

return springSecurityUser.getUsername();
}

if (Objects.isNull(authentication.getPrincipal())) {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
}
return Optional.ofNullable((String) authentication.getPrincipal());
}

return authentication.getPrincipal().toString();
}

private static void isNullAuthentication(Authentication authentication) {
if (authentication == null) {
if (Objects.isNull(authentication)) {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
}
}

private static void isNullSpringSecurityUser(UserDetails springSecurityUser) {
if (Objects.isNull(springSecurityUser.getUsername())) {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kr.ac.hs.oing.common.converter;

import kr.ac.hs.oing.common.dto.ResponseDto;
import kr.ac.hs.oing.common.dto.ResponseDto.ResponseDtoV1;
import kr.ac.hs.oing.common.dto.ResponseDto.ResponseDtoV2;
import kr.ac.hs.oing.common.dto.ResponseMessage;
import kr.ac.hs.oing.error.ErrorMessage;
import kr.ac.hs.oing.error.ErrorResponseDto;
Expand All @@ -10,11 +11,19 @@
@Component
public class ResponseConverter {

public <T> ResponseEntity<ResponseDto<T>> toResponseEntity(ResponseMessage message, T data) {
public ResponseEntity<ResponseDtoV1> toResponseEntity(ResponseMessage message) {
return ResponseEntity
.status(message.getStatus())
.body(
new ResponseDto<>(message, data)
new ResponseDtoV1(message)
);
}

public <T> ResponseEntity<ResponseDtoV2<T>> toResponseEntity(ResponseMessage message, T data) {
return ResponseEntity
.status(message.getStatus())
.body(
new ResponseDtoV2<>(message, data)
);
}

Expand Down
32 changes: 24 additions & 8 deletions src/main/java/kr/ac/hs/oing/common/dto/ResponseDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,29 @@
@Getter
public class ResponseDto<T> {

private final String message;
private final LocalDateTime serverDateTime;
private final T data;

public ResponseDto(ResponseMessage message, T data) {
this.message = message.name();
this.serverDateTime = LocalDateTime.now();
this.data = data;
@Getter
public static class ResponseDtoV1 {

private final String message;
private final LocalDateTime serverDateTime;

public ResponseDtoV1(ResponseMessage message) {
this.message = message.name();
this.serverDateTime = LocalDateTime.now();
}
}

@Getter
public static class ResponseDtoV2<T> {

private final String message;
private final LocalDateTime serverDateTime;
private final T data;

public ResponseDtoV2(ResponseMessage message, T data) {
this.message = message.name();
this.serverDateTime = LocalDateTime.now();
this.data = data;
}
}
}
51 changes: 17 additions & 34 deletions src/main/java/kr/ac/hs/oing/member/application/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import kr.ac.hs.oing.error.exception.NonExitsException;
import kr.ac.hs.oing.member.converter.MemberConverter;
import kr.ac.hs.oing.member.domain.Member;
import kr.ac.hs.oing.member.dto.bundle.MemberLoginBundle;
import kr.ac.hs.oing.member.dto.bundle.MemberSignBundle;
import kr.ac.hs.oing.member.dto.bundle.MemberUpdateBundle;
import kr.ac.hs.oing.member.infrastructure.MemberRepository;
Expand All @@ -22,6 +21,7 @@
@Service
@RequiredArgsConstructor
public class MemberService {

private final MemberRepository memberRepository;
private final PasswordEncoder passwordEncoder;
private final MemberConverter memberConverter;
Expand All @@ -45,22 +45,32 @@ public void createMember(MemberSignBundle bundle) {

@Transactional
public void update(MemberUpdateBundle bundle) {
Member member = memberRepository.findMemberByEmail(bundle.getEmail())
.orElseThrow(() -> {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
});
Member member = findByEmail(bundle.getEmail());

if (existsByNickname(bundle.getNickname()) && !member.isSameNickname(bundle.getNickname())) {
if (existsByNickname(bundle.getNickname()) && !member.isSameNickname(
bundle.getNickname())) {
throw new DuplicationArgumentException(ErrorMessage.DUPLICATION_MEMBER_NICKNAME);
}

if (existsByPhoneNumber(bundle.getPhoneNumber()) && !member.isSamePhoneNumber(bundle.getPhoneNumber())) {
if (existsByPhoneNumber(bundle.getPhoneNumber()) && !member.isSamePhoneNumber(
bundle.getPhoneNumber())) {
throw new DuplicationArgumentException(ErrorMessage.DUPLICATION_MEMBER_PHONE_NUMBER);
}

member.update(passwordEncoder, bundle);
}

@Transactional
public void changeRole(Email email) {
Member member = findByEmail(email);
member.makeMiddleRole();
}

private Member findByEmail(Email email) {
return memberRepository.findMemberByEmail(email)
.orElseThrow(() -> new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER));
}

private boolean existsByEmail(Email email) {
return memberRepository.existsByEmail(email);
}
Expand All @@ -72,31 +82,4 @@ private boolean existsByNickname(Nickname nickname) {
private boolean existsByPhoneNumber(PhoneNumber phoneNumber) {
return memberRepository.existsByPhoneNumber(phoneNumber);
}

@Transactional(readOnly = true)
public MemberLoginBundle findMember(Email email) {
Member member = memberRepository.findMemberByEmail(email)
.orElseThrow(() -> {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
});
String clubName = Objects.isNull(member.getClub()) ? "NON_INCLUDE_CLUB" : member.getClub().getName().getName();
return memberConverter.toMemberLoginDto(member.getId(), member.getNickname(), member.getRole(), clubName);
}

@Transactional
public void changeRole(Email email) {
Member member = memberRepository.findMemberByEmail(email)
.orElseThrow(() -> {
throw new NonExitsException(ErrorMessage.NOT_EXIST_MEMBER);
});
member.makeMiddleRole();
}

@Transactional(readOnly = true)
public Long findClubId(Email email) {
return memberRepository.findMemberByEmail(email)
.orElseThrow(() -> {
throw new NonExitsException(ErrorMessage.NOT_INCLUDE_CLUB);
}).getClub().getId();
}
}
46 changes: 23 additions & 23 deletions src/main/java/kr/ac/hs/oing/member/converter/MemberConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,43 @@

@Component
public class MemberConverter {

public MemberSignBundle toMemberSignBundle(MemberSignRequest request) {
return MemberSignBundle.builder()
.email(new Email(request.getEmail()))
.password(new Password(request.getPassword()))
.name(new Name(request.getName()))
.nickname(new Nickname(request.getNickname()))
.phoneNumber(new PhoneNumber(request.getPhoneNumber()))
.build();
.email(request.getEmail())
.password(request.getPassword())
.name(request.getName())
.nickname(request.getNickname())
.phoneNumber(request.getPhoneNumber())
.build();
}

public Member toMember(PasswordEncoder passwordEncoder, MemberSignBundle memberSignDto) {
Password password = memberSignDto.getPassword().encode(passwordEncoder);
return Member.builder()
.email(memberSignDto.getEmail())
.password(password)
.name(memberSignDto.getName())
.nickname(memberSignDto.getNickname())
.phoneNumber(memberSignDto.getPhoneNumber())
.role(Role.ROLE_USER)
.build();
.email(memberSignDto.getEmail())
.password(password)
.name(memberSignDto.getName())
.nickname(memberSignDto.getNickname())
.phoneNumber(memberSignDto.getPhoneNumber())
.build();
}

public MemberLoginBundle toMemberLoginDto(Long id, Nickname nickname, Role role, String name) {
return MemberLoginBundle.builder()
.id(id)
.nickname(nickname)
.role(role)
.clubName(name)
.build();
.id(id)
.nickname(nickname)
.role(role)
.clubName(name)
.build();
}

public MemberUpdateBundle toMemberUpdateBundle(String username, MemberUpdateRequest request) {
return MemberUpdateBundle.builder()
.email(new Email(username))
.password(new Password(request.getPassword()))
.nickname(new Nickname(request.getNickname()))
.phoneNumber(new PhoneNumber(request.getPhoneNumber()))
.build();
.email(username)
.password(request.getPassword())
.nickname(request.getNickname())
.phoneNumber(request.getPhoneNumber())
.build();
}
}
77 changes: 13 additions & 64 deletions src/main/java/kr/ac/hs/oing/member/domain/Member.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package kr.ac.hs.oing.member.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import kr.ac.hs.oing.club.domain.Club;
import kr.ac.hs.oing.comment.domain.Comment;
import kr.ac.hs.oing.common.domain.DateEntity;
import kr.ac.hs.oing.member.domain.vo.*;
import kr.ac.hs.oing.member.dto.bundle.MemberUpdateBundle;
import kr.ac.hs.oing.post.domain.Post;
import kr.ac.hs.oing.subscription.domain.Subscription;
import lombok.*;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.crypto.password.PasswordEncoder;

import javax.persistence.*;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.TreeSet;

@Getter
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member extends DateEntity {

@JsonIgnore
@Id
@Column(name = "member_id")
Expand All @@ -48,72 +43,26 @@ public class Member extends DateEntity {
@Column(name = "member_role", nullable = false)
private Role role;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "club_Id")
private Club club;

@OneToMany(mappedBy = "subscriptionMember", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Subscription> subscriptions = new TreeSet<>();

@OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Post> posts = new TreeSet<>();

@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Comment> comments = new TreeSet<>();

protected Member() {

}

public Email getEmail() {
return email;
}

public Password getPassword() {
return password;
}

public Nickname getNickname() {
return nickname;
}

public Role getRole() {
return role;
@Builder
public Member(Email email, Password password, Name name,
Nickname nickname, PhoneNumber phoneNumber) {
this.email = email;
this.password = password;
this.name = name;
this.nickname = nickname;
this.phoneNumber = phoneNumber;
this.role = Role.ROLE_USER;
}

public Collection<GrantedAuthority> grantedAuthorities() {
return Collections
.singletonList(role.getGrantedAuthority());
.singletonList(role.getGrantedAuthority());
}

public void makeMiddleRole() {
this.role = Role.ROLE_MIDDLE_ADMIN;
}

public void addClub(Club club) {
this.club = club;
}

public Club getClub() {
return club;
}

public Set<Post> getPosts() {
return posts;
}

public Set<Comment> getComments() {
return comments;
}

public Set<Subscription> getSubscriptions() {
return subscriptions;
}

public Long getId() {
return id;
}

public boolean isSameNickname(Nickname nickname) {
return this.nickname.equals(nickname);
}
Expand Down
Loading

0 comments on commit bc01f99

Please sign in to comment.