diff --git a/src/main/java/org/store/clothstar/common/config/CustomUserDetailsService.java b/src/main/java/org/store/clothstar/common/config/CustomUserDetailsService.java index e74a5b13..280403a1 100644 --- a/src/main/java/org/store/clothstar/common/config/CustomUserDetailsService.java +++ b/src/main/java/org/store/clothstar/common/config/CustomUserDetailsService.java @@ -6,22 +6,22 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.CustomUserDetails; -import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.repository.MemberRepository; +import org.store.clothstar.member.repository.AccountRepository; @Service @Slf4j @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { - private final MemberRepository memberRepository; + private final AccountRepository accountRepository; @Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { log.info("loadUserByUsername() 실행"); - Member member = memberRepository.findByEmail(email) + Account account = accountRepository.findByEmail(email) .orElseThrow(() -> new UsernameNotFoundException("해당 아이디를 찾을 수 없습니다.")); - return new CustomUserDetails(member); + return new CustomUserDetails(account); } } \ No newline at end of file diff --git a/src/main/java/org/store/clothstar/common/config/jwt/JwtAuthenticationFilter.java b/src/main/java/org/store/clothstar/common/config/jwt/JwtAuthenticationFilter.java index 2ec82f40..bdcbb55e 100644 --- a/src/main/java/org/store/clothstar/common/config/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/org/store/clothstar/common/config/jwt/JwtAuthenticationFilter.java @@ -10,11 +10,10 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; -import org.store.clothstar.common.error.ErrorCode; -import org.store.clothstar.common.error.exception.NotFoundMemberException; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.CustomUserDetails; -import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.repository.MemberRepository; +import org.store.clothstar.member.repository.AccountRepository; +import org.store.clothstar.member.repository.AuthorizationRepository; import java.io.IOException; @@ -23,7 +22,8 @@ @Component public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtUtil jwtUtil; - private final MemberRepository memberRepository; + private final AccountRepository accountRepository; + private final AuthorizationRepository authorizationRepository; /** * 요청이 왔을때 token이 있는지 확인하고 token에 대한 유효성 검사를 진행한다. @@ -50,10 +50,12 @@ private void authenticateUserWithToken(String token) { Long memberId = jwtUtil.getMemberId(token); log.info("refresh 토큰 memberId: {}", memberId); - Member member = memberRepository.findById(memberId) - .orElseThrow(() -> new NotFoundMemberException(ErrorCode.NOT_FOUND_MEMBER)); + Account account = accountRepository.findById(memberId) + .orElseThrow(() -> new IllegalArgumentException("계정정보를 찾을수 없습니다.")); - CustomUserDetails customUserDetails = new CustomUserDetails(member); + log.error("account toString : {}", account.toString()); + + CustomUserDetails customUserDetails = new CustomUserDetails(account); UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken( customUserDetails, null, customUserDetails.getAuthorities()); diff --git a/src/main/java/org/store/clothstar/common/config/jwt/JwtService.java b/src/main/java/org/store/clothstar/common/config/jwt/JwtService.java index 1128c18a..c5bf4897 100644 --- a/src/main/java/org/store/clothstar/common/config/jwt/JwtService.java +++ b/src/main/java/org/store/clothstar/common/config/jwt/JwtService.java @@ -7,7 +7,8 @@ import org.springframework.stereotype.Service; import org.store.clothstar.common.error.ErrorCode; import org.store.clothstar.common.error.exception.NotFoundMemberException; -import org.store.clothstar.member.domain.Member; +import org.store.clothstar.member.domain.Account; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.repository.MemberRepository; import java.util.Arrays; @@ -18,6 +19,7 @@ public class JwtService { private final JwtUtil jwtUtil; private final MemberRepository memberRepository; + private final AccountRepository accountRepository; public String getRefreshToken(HttpServletRequest request) { if (request.getCookies() == null) { @@ -33,9 +35,9 @@ public String getRefreshToken(HttpServletRequest request) { public String getAccessTokenByRefreshToken(String refreshToken) { Long memberId = jwtUtil.getMemberId(refreshToken); - Member member = memberRepository.findById(memberId) + Account account = accountRepository.findById(memberId) .orElseThrow(() -> new NotFoundMemberException(ErrorCode.NOT_FOUND_MEMBER)); - return jwtUtil.createAccessToken(member); + return jwtUtil.createAccessToken(account); } } diff --git a/src/main/java/org/store/clothstar/common/config/jwt/JwtUtil.java b/src/main/java/org/store/clothstar/common/config/jwt/JwtUtil.java index 06f92801..44e2a3dd 100644 --- a/src/main/java/org/store/clothstar/common/config/jwt/JwtUtil.java +++ b/src/main/java/org/store/clothstar/common/config/jwt/JwtUtil.java @@ -5,7 +5,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.store.clothstar.member.domain.Member; +import org.store.clothstar.member.domain.Account; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; @@ -46,17 +46,16 @@ public Cookie createCookie(String key, String value) { return cookie; } - public String createAccessToken(Member member) { - return createToken(member, jwtProperties.getAccessTokenValidTimeMillis(), ACCESS_TOKEN); + public String createAccessToken(Account account) { + return createToken(account, jwtProperties.getAccessTokenValidTimeMillis(), ACCESS_TOKEN); } - public String createRefreshToken(Member member) { - return createToken(member, jwtProperties.getRefreshTokenValidTimeMillis(), REFRESH_TOKEN); + public String createRefreshToken(Account account) { + return createToken(account, jwtProperties.getRefreshTokenValidTimeMillis(), REFRESH_TOKEN); } - private String createToken(Member member, Long tokenValidTimeMillis, String tokenType) { - Long memberId = member.getMemberId(); - String memberEmail = member.getEmail(); + private String createToken(Account account, Long tokenValidTimeMillis, String tokenType) { + Long memberId = account.getAccountId(); Date currentDate = new Date(); Date expireDate = new Date(currentDate.getTime() + tokenValidTimeMillis); @@ -69,9 +68,8 @@ private String createToken(Member member, Long tokenValidTimeMillis, String toke .issuedAt(currentDate) .expiration(expireDate) .claim("tokenType", tokenType) - .claim("email", memberEmail) .claim("id", memberId) - .claim("role", member.getRole()) + .claim("role", account.getAuthorizations()) .signWith(secretKey) .compact(); } diff --git a/src/main/java/org/store/clothstar/common/config/jwt/LoginFilter.java b/src/main/java/org/store/clothstar/common/config/jwt/LoginFilter.java index f7a225c1..8bc81e36 100644 --- a/src/main/java/org/store/clothstar/common/config/jwt/LoginFilter.java +++ b/src/main/java/org/store/clothstar/common/config/jwt/LoginFilter.java @@ -16,8 +16,8 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.store.clothstar.common.dto.MessageDTO; import org.store.clothstar.common.util.MessageDTOBuilder; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.CustomUserDetails; -import org.store.clothstar.member.domain.Member; import org.store.clothstar.member.dto.request.MemberLoginRequest; import java.io.IOException; @@ -71,12 +71,14 @@ protected void successfulAuthentication(HttpServletRequest request, HttpServletR Authentication authentication) throws IOException, ServletException { log.info("로그인 성공"); CustomUserDetails customUserDetails = (CustomUserDetails) authentication.getPrincipal(); - Member member = customUserDetails.getMember(); - log.info("member: {}", member.toString()); - String accessToken = jwtUtil.createAccessToken(member); +// Member member = customUserDetails.getMember(); + Account account = customUserDetails.getAccount(); + log.info("account: {}", account.toString()); + + String accessToken = jwtUtil.createAccessToken(account); log.info("생성 accessToken: Bearer {}", accessToken); - String refreshToken = jwtUtil.createRefreshToken(member); + String refreshToken = jwtUtil.createRefreshToken(account); log.info("생성 refreshToken: Bearer {}", refreshToken); response.addHeader("Authorization", "Bearer " + accessToken); diff --git a/src/main/java/org/store/clothstar/common/entity/BaseEntity.java b/src/main/java/org/store/clothstar/common/entity/BaseEntity.java index 99d9fa4c..e863acaf 100644 --- a/src/main/java/org/store/clothstar/common/entity/BaseEntity.java +++ b/src/main/java/org/store/clothstar/common/entity/BaseEntity.java @@ -24,4 +24,8 @@ public class BaseEntity { @Column(name = "deleted_at") protected LocalDateTime deletedAt; + + public void updateDeletedAt() { + this.deletedAt = LocalDateTime.now(); + } } diff --git a/src/main/java/org/store/clothstar/member/application/MemberServiceApplication.java b/src/main/java/org/store/clothstar/member/application/MemberServiceApplication.java index b22a5b1e..aaffe65c 100644 --- a/src/main/java/org/store/clothstar/member/application/MemberServiceApplication.java +++ b/src/main/java/org/store/clothstar/member/application/MemberServiceApplication.java @@ -6,7 +6,7 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.store.clothstar.member.dto.request.CreateMemberRequest; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; +import org.store.clothstar.member.dto.request.ModifyNameRequest; import org.store.clothstar.member.dto.response.MemberResponse; import org.store.clothstar.member.service.MemberService; @@ -35,8 +35,8 @@ public void emailCheck(String email) { memberService.getMemberByEmail(email); } - public void modifyMember(Long memberId, ModifyMemberRequest modifyMemberRequest) { - memberService.modifyMember(memberId, modifyMemberRequest); + public void modifyName(Long memberId, ModifyNameRequest modifyNameRequest) { + memberService.modifyName(memberId, modifyNameRequest); } public void modifyPassword(Long memberId, String password) { diff --git a/src/main/java/org/store/clothstar/member/controller/MemberController.java b/src/main/java/org/store/clothstar/member/controller/MemberController.java index 00cb0558..a6ca65f8 100644 --- a/src/main/java/org/store/clothstar/member/controller/MemberController.java +++ b/src/main/java/org/store/clothstar/member/controller/MemberController.java @@ -20,7 +20,7 @@ import org.store.clothstar.common.dto.MessageDTO; import org.store.clothstar.common.util.MessageDTOBuilder; import org.store.clothstar.member.application.MemberServiceApplication; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; +import org.store.clothstar.member.dto.request.ModifyNameRequest; import org.store.clothstar.member.dto.request.ModifyPasswordRequest; import org.store.clothstar.member.dto.response.MemberResponse; @@ -89,23 +89,23 @@ public ResponseEntity emailDuplicationCheck(@PathVariable String ema return ResponseEntity.ok(messageDTO); } - @Operation(summary = "회원 상세정보 수정", description = "회원 정보를 수정한다.") + @Operation(summary = "회원 이름 수정", description = "회원 이름을 수정한다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "회원 정보가 수정 되었습니다.", content = @Content(schema = @Schema(implementation = MemberResponse.class))), @ApiResponse(responseCode = "404", description = "회원 정보를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponseDTO.class))), }) - @PutMapping("/v1/members/{id}") + @PatchMapping("/v1/members/name/{id}") public ResponseEntity modifyMember(@PathVariable("id") Long memberId, - @RequestBody ModifyMemberRequest modifyMemberRequest) { - log.info("회원수정 요청 데이터 : memberId={}, {}", memberId, modifyMemberRequest.toString()); + @RequestBody ModifyNameRequest modifyNameRequest) { + log.info("회원 이름수정 요청 데이터 : memberId={}, {}", memberId, modifyNameRequest.toString()); - memberServiceApplication.modifyMember(memberId, modifyMemberRequest); + memberServiceApplication.modifyName(memberId, modifyNameRequest); MessageDTO messageDTO = MessageDTOBuilder.buildMessage( HttpStatus.OK.value(), - "회원 정보가 수정 되었습니다." + "회원 이름이 수정 되었습니다." ); return ResponseEntity.ok(messageDTO); diff --git a/src/main/java/org/store/clothstar/member/domain/Account.java b/src/main/java/org/store/clothstar/member/domain/Account.java new file mode 100644 index 00000000..49ea047b --- /dev/null +++ b/src/main/java/org/store/clothstar/member/domain/Account.java @@ -0,0 +1,35 @@ +package org.store.clothstar.member.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity(name = "account") +public class Account { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long accountId; + + @Column(unique = true) + private String email; + private String password; + + @OneToMany(mappedBy = "account", cascade = CascadeType.REMOVE) + @JsonIgnore + private List authorizations = new ArrayList<>(); + + public void updatePassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/org/store/clothstar/member/domain/Admin.java b/src/main/java/org/store/clothstar/member/domain/Admin.java new file mode 100644 index 00000000..3c8ac5ee --- /dev/null +++ b/src/main/java/org/store/clothstar/member/domain/Admin.java @@ -0,0 +1,23 @@ +package org.store.clothstar.member.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import lombok.*; +import org.store.clothstar.common.entity.BaseEntity; +import org.store.clothstar.member.dto.request.ModifyNameRequest; + +@ToString +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity(name = "admin") +public class Admin extends BaseEntity { + @Id + private Long adminId; + private String name; + + public void updateName(ModifyNameRequest modifyNameRequest, java.lang.reflect.Member member) { + this.name = name; + } +} diff --git a/src/main/java/org/store/clothstar/member/domain/Authorization.java b/src/main/java/org/store/clothstar/member/domain/Authorization.java new file mode 100644 index 00000000..341be61b --- /dev/null +++ b/src/main/java/org/store/clothstar/member/domain/Authorization.java @@ -0,0 +1,28 @@ +package org.store.clothstar.member.domain; + +import jakarta.persistence.*; +import lombok.*; + +@ToString +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity(name = "authorizations") +public class Authorization { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long authorizationId; + + @ManyToOne + @JoinColumn(name = "account_id") + private Account account; + + @Enumerated(EnumType.STRING) + private MemberRole role; + + public Authorization(Account account, MemberRole role) { + this.account = account; + this.role = role; + } +} diff --git a/src/main/java/org/store/clothstar/member/domain/CustomUserDetails.java b/src/main/java/org/store/clothstar/member/domain/CustomUserDetails.java index 677e03f3..3f326a4d 100644 --- a/src/main/java/org/store/clothstar/member/domain/CustomUserDetails.java +++ b/src/main/java/org/store/clothstar/member/domain/CustomUserDetails.java @@ -8,27 +8,28 @@ import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; -import java.util.List; @Getter @ToString @RequiredArgsConstructor public class CustomUserDetails implements UserDetails { - private final Member member; + private final Account account; @Override public Collection getAuthorities() { - return List.of(new SimpleGrantedAuthority("ROLE_" + String.valueOf(member.getRole()))); + return account.getAuthorizations().stream() + .map(role -> new SimpleGrantedAuthority("ROLE_" + role)) + .toList(); } @Override public String getPassword() { - return member.getPassword(); + return account.getPassword(); } @Override public String getUsername() { - return member.getEmail(); + return account.getEmail(); } @Override diff --git a/src/main/java/org/store/clothstar/member/domain/Member.java b/src/main/java/org/store/clothstar/member/domain/Member.java index 86a1bb24..41f3351e 100644 --- a/src/main/java/org/store/clothstar/member/domain/Member.java +++ b/src/main/java/org/store/clothstar/member/domain/Member.java @@ -1,13 +1,13 @@ package org.store.clothstar.member.domain; -import jakarta.persistence.*; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; import lombok.*; import lombok.extern.slf4j.Slf4j; import org.store.clothstar.common.entity.BaseEntity; import org.store.clothstar.member.domain.vo.MemberShoppingActivity; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; - -import java.time.LocalDateTime; +import org.store.clothstar.member.dto.request.ModifyNameRequest; @ToString @Getter @@ -18,33 +18,15 @@ @Entity(name = "member") public class Member extends BaseEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) private Long memberId; - @Column(unique = true) - private String email; - private String password; - private String name; private String telNo; - - @Enumerated(EnumType.STRING) - private MemberRole role; + private String name; @Embedded MemberShoppingActivity memberShoppingActivity; - public void updateMember(ModifyMemberRequest modifyMemberRequest, Member member) { - this.name = (modifyMemberRequest.getName() == null || modifyMemberRequest.getName() == "") - ? member.getName() : modifyMemberRequest.getName(); - this.role = (modifyMemberRequest.getRole() == null) ? member.getRole() : modifyMemberRequest.getRole(); - log.info("name : {}, role : {}", name, role); - } - - public void updatePassword(String password) { - this.password = password; - } - - public void updateDeletedAt() { - this.deletedAt = LocalDateTime.now(); + public void updateName(ModifyNameRequest modifyNameRequest) { + this.name = modifyNameRequest.getName(); } -} \ No newline at end of file +} diff --git a/src/main/java/org/store/clothstar/member/domain/Seller.java b/src/main/java/org/store/clothstar/member/domain/Seller.java index dfe5661d..e4aee422 100644 --- a/src/main/java/org/store/clothstar/member/domain/Seller.java +++ b/src/main/java/org/store/clothstar/member/domain/Seller.java @@ -14,7 +14,7 @@ public class Seller extends BaseEntity { @Id private Long memberId; - + @Column(unique = true) private String brandName; @Column(unique = true) diff --git a/src/main/java/org/store/clothstar/member/domain/User.java b/src/main/java/org/store/clothstar/member/domain/User.java new file mode 100644 index 00000000..ce87e97f --- /dev/null +++ b/src/main/java/org/store/clothstar/member/domain/User.java @@ -0,0 +1,30 @@ +//package org.store.clothstar.member.domain; +// +//import jakarta.persistence.Embedded; +//import jakarta.persistence.Entity; +//import jakarta.persistence.Id; +//import lombok.*; +//import lombok.extern.slf4j.Slf4j; +//import org.store.clothstar.common.entity.BaseEntity; +//import org.store.clothstar.member.domain.vo.MemberProfile; +//import org.store.clothstar.member.domain.vo.MemberShoppingActivity; +// +//@ToString +//@Getter +//@Builder +//@NoArgsConstructor +//@AllArgsConstructor +//@Slf4j +//@Entity(name = "user") +//public class User extends BaseEntity { +// +// @Id +// private Long userId; +// private String telNo; +// +// @Embedded +// MemberProfile memberProfile; +// +// @Embedded +// MemberShoppingActivity memberShoppingActivity; +//} diff --git a/src/main/java/org/store/clothstar/member/domain/vo/MemberProfile.java b/src/main/java/org/store/clothstar/member/domain/vo/MemberProfile.java new file mode 100644 index 00000000..73f9b34e --- /dev/null +++ b/src/main/java/org/store/clothstar/member/domain/vo/MemberProfile.java @@ -0,0 +1,23 @@ +package org.store.clothstar.member.domain.vo; + +import jakarta.persistence.Embeddable; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.store.clothstar.member.dto.request.ModifyNameRequest; + +import java.lang.reflect.Member; + +@Embeddable +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MemberProfile { + String name; + + public void updateName(ModifyNameRequest modifyNameRequest, Member member) { + this.name = name; + } +} diff --git a/src/main/java/org/store/clothstar/member/dto/request/CreateMemberRequest.java b/src/main/java/org/store/clothstar/member/dto/request/CreateMemberRequest.java index 6a35d6a1..1cd0de02 100644 --- a/src/main/java/org/store/clothstar/member/dto/request/CreateMemberRequest.java +++ b/src/main/java/org/store/clothstar/member/dto/request/CreateMemberRequest.java @@ -2,8 +2,8 @@ import jakarta.validation.constraints.*; import lombok.*; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.domain.MemberRole; import org.store.clothstar.member.domain.vo.MemberShoppingActivity; @Getter @@ -27,24 +27,18 @@ public class CreateMemberRequest { @NotNull(message = "인증번호를 입력해 주세요") private String certifyNum; - public Member toMember(String encryptedPassword) { - return Member.builder() + public Account toAccount(String encryptedPassword) { + return Account.builder() .email(email) .password(encryptedPassword) - .name(name) - .telNo(telNo) - .role(MemberRole.USER) - .memberShoppingActivity(new MemberShoppingActivity().init()) .build(); } - public Member toMember() { + public Member toMember(Long memberId) { return Member.builder() - .email(email) - .password(password) + .memberId(memberId) .name(name) .telNo(telNo) - .role(MemberRole.USER) .memberShoppingActivity(new MemberShoppingActivity().init()) .build(); } diff --git a/src/main/java/org/store/clothstar/member/dto/request/ModifyMemberRequest.java b/src/main/java/org/store/clothstar/member/dto/request/ModifyNameRequest.java similarity index 57% rename from src/main/java/org/store/clothstar/member/dto/request/ModifyMemberRequest.java rename to src/main/java/org/store/clothstar/member/dto/request/ModifyNameRequest.java index 315783ab..ff6ac5cb 100644 --- a/src/main/java/org/store/clothstar/member/dto/request/ModifyMemberRequest.java +++ b/src/main/java/org/store/clothstar/member/dto/request/ModifyNameRequest.java @@ -1,14 +1,14 @@ package org.store.clothstar.member.dto.request; +import jakarta.validation.constraints.NotNull; import lombok.*; -import org.store.clothstar.member.domain.MemberRole; @Getter @NoArgsConstructor @AllArgsConstructor @Builder @ToString -public class ModifyMemberRequest { +public class ModifyNameRequest { + @NotNull private String name; - private MemberRole role; } \ No newline at end of file diff --git a/src/main/java/org/store/clothstar/member/dto/response/MemberResponse.java b/src/main/java/org/store/clothstar/member/dto/response/MemberResponse.java index f187adce..65f90809 100644 --- a/src/main/java/org/store/clothstar/member/dto/response/MemberResponse.java +++ b/src/main/java/org/store/clothstar/member/dto/response/MemberResponse.java @@ -7,7 +7,7 @@ @Getter public class MemberResponse { private Long memberId; - private String email; + // private String email; private String name; private String telNo; private int totalPaymentPrice; @@ -15,7 +15,7 @@ public class MemberResponse { public MemberResponse(Member member) { this.memberId = member.getMemberId(); - this.email = member.getEmail(); +// this.email = member.getEmail(); this.name = member.getName(); this.telNo = member.getTelNo(); this.totalPaymentPrice = member.getMemberShoppingActivity().getTotalPaymentPrice(); diff --git a/src/main/java/org/store/clothstar/member/dto/response/MemberSimpleResponse.java b/src/main/java/org/store/clothstar/member/dto/response/MemberSimpleResponse.java index 571b8690..1e543d1f 100644 --- a/src/main/java/org/store/clothstar/member/dto/response/MemberSimpleResponse.java +++ b/src/main/java/org/store/clothstar/member/dto/response/MemberSimpleResponse.java @@ -8,14 +8,14 @@ @Builder public class MemberSimpleResponse { private Long memberId; - private String email; + // private String email; private String name; private String telNo; public static MemberSimpleResponse from(Member member) { return MemberSimpleResponse.builder() .memberId(member.getMemberId()) - .email(member.getEmail()) +// .email(member.getEmail()) .name(member.getName()) .telNo(member.getTelNo()) .build(); diff --git a/src/main/java/org/store/clothstar/member/repository/AccountRepository.java b/src/main/java/org/store/clothstar/member/repository/AccountRepository.java new file mode 100644 index 00000000..3ddb045f --- /dev/null +++ b/src/main/java/org/store/clothstar/member/repository/AccountRepository.java @@ -0,0 +1,16 @@ +package org.store.clothstar.member.repository; + +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.JpaRepository; +import org.store.clothstar.member.domain.Account; + +import java.util.Optional; + +public interface AccountRepository extends JpaRepository { + @EntityGraph(attributePaths = {"authorizations"}) + Optional findByEmail(String email); + + // @Query("select acc from account acc join fetch acc.authorizations") + @EntityGraph(attributePaths = {"authorizations"}) + Optional findById(Long accountId); +} diff --git a/src/main/java/org/store/clothstar/member/repository/AuthorizationRepository.java b/src/main/java/org/store/clothstar/member/repository/AuthorizationRepository.java new file mode 100644 index 00000000..36728dbf --- /dev/null +++ b/src/main/java/org/store/clothstar/member/repository/AuthorizationRepository.java @@ -0,0 +1,8 @@ +package org.store.clothstar.member.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.store.clothstar.member.domain.Authorization; + +public interface AuthorizationRepository extends JpaRepository { + +} diff --git a/src/main/java/org/store/clothstar/member/repository/MemberJpaRepository.java b/src/main/java/org/store/clothstar/member/repository/MemberJpaRepository.java index 787c0558..d413c654 100644 --- a/src/main/java/org/store/clothstar/member/repository/MemberJpaRepository.java +++ b/src/main/java/org/store/clothstar/member/repository/MemberJpaRepository.java @@ -7,11 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.store.clothstar.member.domain.Member; -import java.util.Optional; - public interface MemberJpaRepository extends JpaRepository, MemberRepository { - Optional findByEmail(String email); - @Query(value = "select m from member m where m.deletedAt is null order by m.createdAt desc", countQuery = "select count(m) from member m") Page findAllOffsetPaging(Pageable pageable); diff --git a/src/main/java/org/store/clothstar/member/repository/MemberRepository.java b/src/main/java/org/store/clothstar/member/repository/MemberRepository.java index b5450785..145fd7ed 100644 --- a/src/main/java/org/store/clothstar/member/repository/MemberRepository.java +++ b/src/main/java/org/store/clothstar/member/repository/MemberRepository.java @@ -14,7 +14,5 @@ public interface MemberRepository { Optional findById(Long memberId); - Optional findByEmail(String email); - Member save(Member member); } \ No newline at end of file diff --git a/src/main/java/org/store/clothstar/member/service/MemberService.java b/src/main/java/org/store/clothstar/member/service/MemberService.java index 70c355c0..676a6e69 100644 --- a/src/main/java/org/store/clothstar/member/service/MemberService.java +++ b/src/main/java/org/store/clothstar/member/service/MemberService.java @@ -5,7 +5,7 @@ import org.springframework.data.domain.Slice; import org.store.clothstar.member.domain.Member; import org.store.clothstar.member.dto.request.CreateMemberRequest; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; +import org.store.clothstar.member.dto.request.ModifyNameRequest; import org.store.clothstar.member.dto.response.MemberResponse; public interface MemberService { @@ -21,7 +21,7 @@ public interface MemberService { void updatePassword(Long memberId, String password); - void modifyMember(Long memberId, ModifyMemberRequest modifyMemberRequest); + void modifyName(Long memberId, ModifyNameRequest modifyNameRequest); Long signUp(CreateMemberRequest createMemberDTO); diff --git a/src/main/java/org/store/clothstar/member/service/MemberServiceImpl.java b/src/main/java/org/store/clothstar/member/service/MemberServiceImpl.java index f47c9947..284ad7cf 100644 --- a/src/main/java/org/store/clothstar/member/service/MemberServiceImpl.java +++ b/src/main/java/org/store/clothstar/member/service/MemberServiceImpl.java @@ -16,10 +16,15 @@ import org.store.clothstar.common.mail.MailSendDTO; import org.store.clothstar.common.mail.MailService; import org.store.clothstar.common.redis.RedisUtil; +import org.store.clothstar.member.domain.Account; +import org.store.clothstar.member.domain.Authorization; import org.store.clothstar.member.domain.Member; +import org.store.clothstar.member.domain.MemberRole; import org.store.clothstar.member.dto.request.CreateMemberRequest; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; +import org.store.clothstar.member.dto.request.ModifyNameRequest; import org.store.clothstar.member.dto.response.MemberResponse; +import org.store.clothstar.member.repository.AccountRepository; +import org.store.clothstar.member.repository.AuthorizationRepository; import org.store.clothstar.member.repository.MemberRepository; /** @@ -32,7 +37,9 @@ @RequiredArgsConstructor @Transactional public class MemberServiceImpl implements MemberService { + private final AccountRepository accountRepository; private final MemberRepository memberRepository; + private final AuthorizationRepository authorizationRepository; private final PasswordEncoder passwordEncoder; private final MailContentBuilder mailContentBuilder; private final MailService mailService; @@ -60,18 +67,18 @@ public MemberResponse getMemberById(Long memberId) { @Override public void getMemberByEmail(String email) { - if (memberRepository.findByEmail(email).isPresent()) { + if (accountRepository.findByEmail(email).isPresent()) { throw new DuplicatedEmailException(ErrorCode.DUPLICATED_EMAIL); } } @Override - public void modifyMember(Long memberId, ModifyMemberRequest modifyMemberRequest) { - log.info("회원 정보 수정 memberId = {}, name = {}, role = {}", memberId, modifyMemberRequest.getName(), modifyMemberRequest.getRole()); + public void modifyName(Long memberId, ModifyNameRequest modifyNameRequest) { + log.info("회원 이름 수정 memberId = {}, name = {}", memberId, modifyNameRequest.getName()); Member member = memberRepository.findById(memberId) .orElseThrow(() -> new NotFoundMemberException(ErrorCode.NOT_FOUND_MEMBER)); - member.updateMember(modifyMemberRequest, member); + member.updateName(modifyNameRequest); } @Override @@ -86,17 +93,17 @@ public void updateDeleteAt(Long memberId) { @Override public void updatePassword(Long memberId, String password) { log.info("회원 비밀번호 변경 memberId = {}", memberId); - Member member = memberRepository.findById(memberId) + Account account = accountRepository.findById(memberId) .orElseThrow(() -> new NotFoundMemberException(ErrorCode.NOT_FOUND_MEMBER)); String encodedPassword = passwordEncoder.encode(password); - validCheck(member, encodedPassword); + validCheck(account, encodedPassword); - member.updatePassword(encodedPassword); + account.updatePassword(encodedPassword); } - private void validCheck(Member member, String encodedPassword) { - String originalPassword = member.getPassword(); + private void validCheck(Account account, String encodedPassword) { + String originalPassword = account.getPassword(); if (passwordEncoder.matches(originalPassword, encodedPassword)) { throw new IllegalArgumentException("이전 비밀번호와 같은 비밀번호 입니다."); } @@ -104,22 +111,27 @@ private void validCheck(Member member, String encodedPassword) { @Override public Long signUp(CreateMemberRequest createMemberDTO) { - memberRepository.findByEmail(createMemberDTO.getEmail()).ifPresent(m -> { - throw new IllegalArgumentException("이미 존재하는 아이디 입니다."); + accountRepository.findByEmail(createMemberDTO.getEmail()).ifPresent(m -> { + throw new DuplicatedEmailException(ErrorCode.DUPLICATED_EMAIL); }); String encodedPassword = passwordEncoder.encode(createMemberDTO.getPassword()); - Member member = createMemberDTO.toMember(encodedPassword); + Account account = createMemberDTO.toAccount(encodedPassword); //인증코드 확인 - boolean certifyStatus = verifyEmailCertifyNum(member.getEmail(), createMemberDTO.getCertifyNum()); + boolean certifyStatus = verifyEmailCertifyNum(createMemberDTO.getEmail(), createMemberDTO.getCertifyNum()); if (certifyStatus) { - member = memberRepository.save(member); + account = accountRepository.save(account); + Member member = createMemberDTO.toMember(account.getAccountId()); + memberRepository.save(member); + + Authorization authorization = new Authorization(account, MemberRole.USER); + authorizationRepository.save(authorization); } else { throw new SignupCertifyNumAuthFailedException(ErrorCode.INVALID_AUTH_CERTIFY_NUM); } - return member.getMemberId(); + return account.getAccountId(); } @Override diff --git a/src/test/java/org/store/clothstar/common/config/jwt/JwtControllerIntegrationTest.java b/src/test/java/org/store/clothstar/common/config/jwt/JwtControllerIntegrationTest.java index f0133ad6..206564ab 100644 --- a/src/test/java/org/store/clothstar/common/config/jwt/JwtControllerIntegrationTest.java +++ b/src/test/java/org/store/clothstar/common/config/jwt/JwtControllerIntegrationTest.java @@ -11,8 +11,8 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.transaction.annotation.Transactional; -import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.repository.MemberRepository; +import org.store.clothstar.member.domain.Account; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.util.CreateObject; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -33,14 +33,14 @@ class JwtControllerIntegrationTest { private MockMvc mockMvc; @Autowired - private MemberRepository memberRepository; + private AccountRepository accountRepository; - private Member member; + private Account account; @DisplayName("회원가입한 멤버아이디와, 인증에 필요한 access 토큰을 가져옵니다.") @BeforeEach public void getMemberId_getAccessToken() { - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + account = accountRepository.save(CreateObject.getAccount()); } @DisplayName("refresh 토큰으로 access 토큰을 가져온다.") @@ -48,7 +48,7 @@ public void getMemberId_getAccessToken() { void accessToken_reissue_by_RefreshToken() throws Exception { //given String ACCESS_TOKEN_REISSUE_URL = "/v1/access"; - String refreshToken = jwtUtil.createRefreshToken(member); + String refreshToken = jwtUtil.createRefreshToken(account); //when ResultActions actions = mockMvc.perform(post(ACCESS_TOKEN_REISSUE_URL) diff --git a/src/test/java/org/store/clothstar/common/config/jwt/JwtUnitTest.java b/src/test/java/org/store/clothstar/common/config/jwt/JwtUnitTest.java index 53470d4d..dbd4b92f 100644 --- a/src/test/java/org/store/clothstar/common/config/jwt/JwtUnitTest.java +++ b/src/test/java/org/store/clothstar/common/config/jwt/JwtUnitTest.java @@ -8,7 +8,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; -import org.store.clothstar.member.domain.Member; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.util.CreateObject; @SpringBootTest @@ -23,10 +23,10 @@ class JwtUnitTest { @Test void createAccessTokenTest() { //given - Member member = CreateObject.getMemberByCreateMemberRequestDTO(); + Account account = CreateObject.getAccount(); //when - String accessToken = jwtUtil.createAccessToken(member); + String accessToken = jwtUtil.createAccessToken(account); String tokenType = jwtUtil.getTokenType(accessToken); System.out.println("accessToken = " + accessToken); @@ -39,10 +39,10 @@ void createAccessTokenTest() { @Test void createRefreshTokenTest() { //given - Member member = CreateObject.getMemberByCreateMemberRequestDTO(); + Account account = CreateObject.getAccount(); //when - String refreshToken = jwtUtil.createRefreshToken(member); + String refreshToken = jwtUtil.createRefreshToken(account); String tokenType = jwtUtil.getTokenType(refreshToken); //then diff --git a/src/test/java/org/store/clothstar/member/controller/AddressControllerIntegrationTest.java b/src/test/java/org/store/clothstar/member/controller/AddressControllerIntegrationTest.java index b1b69585..a56cff59 100644 --- a/src/test/java/org/store/clothstar/member/controller/AddressControllerIntegrationTest.java +++ b/src/test/java/org/store/clothstar/member/controller/AddressControllerIntegrationTest.java @@ -1,6 +1,9 @@ package org.store.clothstar.member.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.transaction.Transactional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -12,11 +15,13 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; -import org.springframework.transaction.annotation.Transactional; import org.store.clothstar.common.config.jwt.JwtUtil; -import org.store.clothstar.member.domain.Member; +import org.store.clothstar.member.domain.Account; +import org.store.clothstar.member.domain.Authorization; +import org.store.clothstar.member.domain.MemberRole; import org.store.clothstar.member.dto.request.CreateAddressRequest; -import org.store.clothstar.member.repository.AddressRepository; +import org.store.clothstar.member.repository.AccountRepository; +import org.store.clothstar.member.repository.AuthorizationRepository; import org.store.clothstar.member.repository.MemberRepository; import org.store.clothstar.member.service.AddressServiceImpl; import org.store.clothstar.member.util.CreateObject; @@ -42,7 +47,10 @@ class AddressControllerIntegrationTest { private MemberRepository memberRepository; @Autowired - private AddressRepository addressRepository; + private AccountRepository accountRepository; + + @Autowired + private AuthorizationRepository authorizationRepository; @Autowired private AddressServiceImpl addressServiceImpl; @@ -50,25 +58,38 @@ class AddressControllerIntegrationTest { @Autowired private JwtUtil jwtUtil; + @PersistenceContext + private EntityManager entityManager; + private static final String ADDRESS_URL = "/v1/members/addresses/"; - private Member member; - private Long memberId; + private Account account; + private Long accountId; private String accessToken; @DisplayName("회원가입한 멤버아이디와, 인증에 필요한 access 토큰을 가져옵니다.") @BeforeEach public void getMemberId_getAccessToken() { - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); - memberId = member.getMemberId(); - accessToken = jwtUtil.createAccessToken(member); + account = accountRepository.save(CreateObject.getAccount()); + memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); + accountId = account.getAccountId(); + Authorization authorization = Authorization.builder() + .account(account) + .role(MemberRole.USER) + .build(); + + authorizationRepository.save(authorization); + accessToken = jwtUtil.createAccessToken(account); + + entityManager.flush(); + entityManager.clear(); } @DisplayName("회원 배송지 저장 통합 테스트") @Test void saveMemberAddrTest() throws Exception { //given - final String url = ADDRESS_URL + memberId; + final String url = ADDRESS_URL + accountId; CreateAddressRequest createAddressRequest = getCreateAddressRequest(); final String addressRequestBody = objectMapper.writeValueAsString(createAddressRequest); @@ -89,9 +110,9 @@ void saveMemberAddrTest() throws Exception { @Test void memberGetAllAddressTest() throws Exception { //given - final String getMemberAddressURL = ADDRESS_URL + memberId; + final String getMemberAddressURL = ADDRESS_URL + accountId; for (int i = 0; i < 5; i++) { - addressServiceImpl.addrSave(memberId, getCreateAddressRequest("서울시 공릉동" + i)); + addressServiceImpl.addrSave(accountId, getCreateAddressRequest("서울시 공릉동" + i)); } //when diff --git a/src/test/java/org/store/clothstar/member/controller/MemberAndSellerSignUpIntegrationTest.java b/src/test/java/org/store/clothstar/member/controller/MemberAndSellerSignUpIntegrationTest.java index c1edb409..7936b9a4 100644 --- a/src/test/java/org/store/clothstar/member/controller/MemberAndSellerSignUpIntegrationTest.java +++ b/src/test/java/org/store/clothstar/member/controller/MemberAndSellerSignUpIntegrationTest.java @@ -13,9 +13,10 @@ import org.springframework.test.web.servlet.ResultActions; import org.springframework.transaction.annotation.Transactional; import org.store.clothstar.common.redis.RedisUtil; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.domain.MemberRole; import org.store.clothstar.member.dto.request.*; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.repository.MemberRepository; import org.store.clothstar.member.util.CreateObject; @@ -39,6 +40,9 @@ class MemberAndSellerSignUpIntegrationTest { @Autowired private MemberRepository memberRepository; + @Autowired + private AccountRepository accountRepository; + @Autowired private RedisUtil redisUtil; @@ -91,7 +95,8 @@ void certifyNumEmailSendTest() throws Exception { @Test void sellerSignUpIntegrationTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); Long memberId = member.getMemberId(); final String sellerUrl = SELLER_URL + "/" + memberId; CreateSellerRequest createSellerRequest = getCreateSellerRequest(memberId); @@ -113,7 +118,8 @@ void getAllMemberOffsetTest() throws Exception { //given 5명의 회원을 만든다. for (int i = 0; i < 5; i++) { String email = "test" + i + "@naver.com"; - memberRepository.save(CreateObject.getCreateMemberRequest(email).toMember()); + Account account = accountRepository.save(CreateObject.getAccount(email)); + memberRepository.save(CreateObject.getCreateMemberRequest(email).toMember(account.getAccountId())); } final String url = "/v1/members?page=0"; @@ -134,7 +140,8 @@ void getAllMemberSliceTest() throws Exception { //given 5명의 회원을 만든다. for (int i = 0; i < 5; i++) { String email = "test" + i + "@naver.com"; - memberRepository.save(CreateObject.getCreateMemberRequest(email).toMember()); + Account account = accountRepository.save(CreateObject.getAccount(email)); + memberRepository.save(CreateObject.getCreateMemberRequest(email).toMember(account.getAccountId())); } final String url = "/v1/members?page=0"; @@ -153,7 +160,8 @@ void getAllMemberSliceTest() throws Exception { @Test void getMemberTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); Long memberId = member.getMemberId(); String getMemberURL = MEMBER_URL + "/" + memberId; @@ -170,8 +178,8 @@ void getMemberTest() throws Exception { @Test void emailDuplicationCheckTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); - String emailDuplicationCheckURL = MEMBER_URL + "/email/" + member.getEmail(); + Account account = accountRepository.save(CreateObject.getAccount()); + String emailDuplicationCheckURL = MEMBER_URL + "/email/" + account.getEmail(); //when ResultActions actions = mockMvc.perform(get(emailDuplicationCheckURL) @@ -182,32 +190,30 @@ void emailDuplicationCheckTest() throws Exception { actions.andExpect(jsonPath("$.message").value("이미 사용중인 이메일 입니다.")); } - @DisplayName("회원 이름과 권한을 수정하는 테스트") + @DisplayName("회원 이름을 수정하는 테스트") @WithMockUser @Test void modifyName_modifyAuth_MemberTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); Long memberId = member.getMemberId(); - String modifyMemberURL = MEMBER_URL + "/" + memberId; - ModifyMemberRequest modifyMemberRequest = ModifyMemberRequest.builder() - .name("관리자") - .role(MemberRole.ADMIN) + String modifyMemberURL = MEMBER_URL + "/name/" + account.getAccountId(); + ModifyNameRequest modifyNameRequest = ModifyNameRequest.builder() + .name("비왕") .build(); - final String modifyMemberRequestBody = objectMapper.writeValueAsString(modifyMemberRequest); + final String modifyMemberRequestBody = objectMapper.writeValueAsString(modifyNameRequest); //when - ResultActions actions = mockMvc.perform(put(modifyMemberURL) + ResultActions actions = mockMvc.perform(patch(modifyMemberURL) .contentType(MediaType.APPLICATION_JSON) .content(modifyMemberRequestBody)); //then - //이름과 권한이 바꼈는지 확인 actions.andExpect(status().isOk()); Member member = memberRepository.findById(memberId).get(); - assertThat(member.getName()).isEqualTo("관리자"); - assertThat(member.getRole()).isEqualTo(MemberRole.ADMIN); + assertThat(member.getName()).isEqualTo("비왕"); } @DisplayName("회원 비밀번호 수정 통합 테스트") @@ -215,9 +221,10 @@ void modifyName_modifyAuth_MemberTest() throws Exception { @Test void modifyPasswordMemberTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); - final String originalPassword = member.getPassword(); - final String modifyPasswordMemberURL = MEMBER_URL + "/" + member.getMemberId(); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); + final String originalPassword = account.getPassword(); + final String modifyPasswordMemberURL = MEMBER_URL + "/" + account.getAccountId(); ModifyPasswordRequest modifyPasswordRequest = ModifyPasswordRequest.builder() .password("modified123") .build(); @@ -231,7 +238,7 @@ void modifyPasswordMemberTest() throws Exception { //then actions.andExpect(status().isOk()); - Member updatedMember = memberRepository.findById(member.getMemberId()).get(); + Account updatedMember = accountRepository.findById(member.getMemberId()).get(); assertThat(originalPassword).isNotEqualTo(updatedMember.getPassword()); } @@ -241,7 +248,8 @@ void modifyPasswordMemberTest() throws Exception { void deleteMemberTest() throws Exception { //given //회원가입을 한 후 삭제 필드는 null이다. - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); Long memberId = member.getMemberId(); assertThat(member.getDeletedAt()).isNull(); String deleteURL = MEMBER_URL + "/" + memberId; diff --git a/src/test/java/org/store/clothstar/member/controller/SellerControllerIntegrationTest.java b/src/test/java/org/store/clothstar/member/controller/SellerControllerIntegrationTest.java index 7c899383..5cf0ae6b 100644 --- a/src/test/java/org/store/clothstar/member/controller/SellerControllerIntegrationTest.java +++ b/src/test/java/org/store/clothstar/member/controller/SellerControllerIntegrationTest.java @@ -11,9 +11,11 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; import org.store.clothstar.member.dto.request.CreateMemberRequest; import org.store.clothstar.member.dto.request.CreateSellerRequest; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.repository.MemberRepository; import org.store.clothstar.member.service.MemberServiceImpl; import org.store.clothstar.member.service.SellerServiceImpl; @@ -37,6 +39,9 @@ class SellerControllerIntegrationTest { @Autowired private MemberRepository memberRepository; + @Autowired + private AccountRepository accountRepository; + @Autowired MemberServiceImpl memberServiceImpl; @@ -52,7 +57,8 @@ class SellerControllerIntegrationTest { @Test void getSellerTest() throws Exception { //given - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + Account account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); memberId = member.getMemberId(); Long sellerId = sellerServiceImpl.sellerSave(memberId, getCreateSellerRequest()); String sellerMemberIdURL = SELLER_URL + "/" + memberId; diff --git a/src/test/java/org/store/clothstar/member/service/AddressServiceJpaMockUnitTest.java b/src/test/java/org/store/clothstar/member/service/AddressServiceJpaMockUnitTest.java index a6e67475..3fa0ed36 100644 --- a/src/test/java/org/store/clothstar/member/service/AddressServiceJpaMockUnitTest.java +++ b/src/test/java/org/store/clothstar/member/service/AddressServiceJpaMockUnitTest.java @@ -47,7 +47,7 @@ void getMemberAddrJpaUnitTest() { given(address.getAddressInfo()).willReturn(addressInfo); List
addresses = List.of(address, address); given(addressRepository.findAddressListByMemberId(any())).willReturn(addresses); - given(memberRepository.findById(anyLong())).willReturn(Optional.ofNullable(CreateObject.getMemberByCreateMemberRequestDTO())); + given(memberRepository.findById(anyLong())).willReturn(Optional.ofNullable(CreateObject.getMemberByCreateMemberRequestDTO(anyLong()))); //when List memberAddressResponseList = AddressServiceImpl.findMemberAllAddress(memberId); diff --git a/src/test/java/org/store/clothstar/member/service/MemberPasswordUpdateServiceUnitTest.java b/src/test/java/org/store/clothstar/member/service/MemberPasswordUpdateServiceUnitTest.java index 92c0f5fc..90ccb397 100644 --- a/src/test/java/org/store/clothstar/member/service/MemberPasswordUpdateServiceUnitTest.java +++ b/src/test/java/org/store/clothstar/member/service/MemberPasswordUpdateServiceUnitTest.java @@ -9,8 +9,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.repository.MemberRepository; +import org.store.clothstar.member.domain.Account; +import org.store.clothstar.member.repository.AccountRepository; import java.util.Optional; @@ -22,7 +22,7 @@ @ExtendWith(MockitoExtension.class) class MemberPasswordUpdateServiceUnitTest { @Mock - private MemberRepository memberRepository; + private AccountRepository accountRepository; @InjectMocks private MemberServiceImpl memberServiceImpl; @@ -36,9 +36,9 @@ void duplicatePassword() { //given Long memberId = 1L; String password = "test1234"; - Member member = mock(Member.class); - given(memberRepository.findById(memberId)).willReturn(Optional.of(member)); - when(member.getPassword()).thenReturn(password); + Account account = mock(Account.class); + given(accountRepository.findById(memberId)).willReturn(Optional.of(account)); + when(account.getPassword()).thenReturn(password); //when Throwable exception = assertThrows(IllegalArgumentException.class, () -> { @@ -46,7 +46,7 @@ void duplicatePassword() { }); //then - verify(memberRepository, times(1)).findById(memberId); + verify(accountRepository, times(1)).findById(memberId); assertThat(exception.getMessage()).isEqualTo("이전 비밀번호와 같은 비밀번호 입니다."); } } \ No newline at end of file diff --git a/src/test/java/org/store/clothstar/member/service/MemberServiceJpaUnitTest.java b/src/test/java/org/store/clothstar/member/service/MemberServiceJpaUnitTest.java index 6f50c7ee..6ed22001 100644 --- a/src/test/java/org/store/clothstar/member/service/MemberServiceJpaUnitTest.java +++ b/src/test/java/org/store/clothstar/member/service/MemberServiceJpaUnitTest.java @@ -7,9 +7,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; +import org.store.clothstar.common.error.ErrorCode; +import org.store.clothstar.common.error.exception.DuplicatedEmailException; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; -import org.store.clothstar.member.domain.MemberRole; -import org.store.clothstar.member.dto.request.ModifyMemberRequest; +import org.store.clothstar.member.dto.request.ModifyNameRequest; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.repository.MemberRepository; import org.store.clothstar.member.util.CreateObject; @@ -28,73 +31,55 @@ public class MemberServiceJpaUnitTest { @Autowired private MemberRepository memberRepository; + @Autowired + private AccountRepository accountRepository; + private Long memberId; private Member member; + private Account account; @DisplayName("회원가입후 memberId를 반환한다.") @BeforeEach public void getMemberId_getAccessToken() { //given && when - member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO()); + account = accountRepository.save(CreateObject.getAccount()); + member = memberRepository.save(CreateObject.getMemberByCreateMemberRequestDTO(account.getAccountId())); memberId = member.getMemberId(); //then assertThat(memberId).isNotNull(); } - @DisplayName("회원 권한에 대한 수정을 확인 한다. 다른 필드는 변경되면 안된다") - @Test - void modifyMemberAuthUnitTest() { - //회원가입시 기본 User 권한으로 적용 되었는지 확인 - assertThat(member.getRole()).isEqualTo(MemberRole.USER); - String name = member.getName(); - - //given - ModifyMemberRequest modifyMemberRequest = ModifyMemberRequest.builder() - .role(MemberRole.SELLER) - .build(); - - //when - memberServiceImpl.modifyMember(memberId, modifyMemberRequest); - - //then - //Seller 권한으로 변경 되었는지 확인 - Member modifiedMember = memberRepository.findById(memberId).get(); - assertThat(modifiedMember.getRole()).isEqualTo(MemberRole.SELLER); - assertThat(name).isEqualTo(modifiedMember.getName()); //이름은 변경 안됐는지 확인한다. - } - - @DisplayName("회원 이름에 대한 수정을 확인 한다. 다른 필드는 변경되면 안된다.") + @DisplayName("회원 이름에 대한 수정을 확인 한다.") @Test void modifyMemberNameUnitTest() { //given - MemberRole memberRole = member.getRole(); - ModifyMemberRequest modifyMemberRequest = ModifyMemberRequest.builder() + String originPassword = member.getName(); + ModifyNameRequest modifyNameRequest = ModifyNameRequest.builder() .name("아이언맨") .build(); //when - memberServiceImpl.modifyMember(memberId, modifyMemberRequest); + memberServiceImpl.modifyName(memberId, modifyNameRequest); //then - //Seller 권한으로 변경 되었는지 확인 Member modifiedMember = memberRepository.findById(memberId).get(); - assertThat(memberRole).isEqualTo(modifiedMember.getRole()); //권한은 변경 안됐는지 확인 확인한다. + assertThat(modifiedMember.getName()).isNotEqualTo(originPassword); } @DisplayName("비밀번호가 변경 됐는지 확인한다.") @Test void modifyPasswordUnitTest() { //given - String originPassword = member.getPassword(); + String originPassword = account.getPassword(); String modifyPassword = "zxcvasdf123"; //when memberServiceImpl.updatePassword(memberId, modifyPassword); //then - Member modifiedMember = memberRepository.findById(memberId).get(); - assertThat(modifiedMember.getPassword()).isNotEqualTo(originPassword); + Account accountRepository = this.accountRepository.findById(memberId).get(); + assertThat(accountRepository.getPassword()).isNotEqualTo(originPassword); } @DisplayName("회원삭제시 deleteAt 필드가 현재시간으로 업데이트 됐는지 확인한다.") @@ -115,12 +100,10 @@ void memberDeleteAtUnitTest() { @DisplayName("같은 아이디로 회원가입시 에러 메시지 응답한다.") @Test void signUpValid_idDuplicateCheck() { - Throwable exception = assertThrows(IllegalArgumentException.class, () -> { + Throwable exception = assertThrows(DuplicatedEmailException.class, () -> { memberServiceImpl.signUp(CreateObject.getCreateMemberRequest()); }); - assertThat(exception.getMessage()).isEqualTo("이미 존재하는 아이디 입니다."); + assertThat(exception.getMessage()).isEqualTo(ErrorCode.DUPLICATED_EMAIL.getMessage()); } - - } \ No newline at end of file diff --git a/src/test/java/org/store/clothstar/member/service/SellerCreateJpaServiceUnitTest.java b/src/test/java/org/store/clothstar/member/service/SellerCreateJpaServiceUnitTest.java index 9b8def4a..be6f0a0b 100644 --- a/src/test/java/org/store/clothstar/member/service/SellerCreateJpaServiceUnitTest.java +++ b/src/test/java/org/store/clothstar/member/service/SellerCreateJpaServiceUnitTest.java @@ -11,8 +11,10 @@ import org.store.clothstar.common.error.exception.DuplicatedBizNoException; import org.store.clothstar.common.error.exception.DuplicatedBrandNameException; import org.store.clothstar.common.error.exception.DuplicatedSellerException; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; import org.store.clothstar.member.dto.request.CreateSellerRequest; +import org.store.clothstar.member.repository.AccountRepository; import org.store.clothstar.member.repository.MemberRepository; import org.store.clothstar.member.util.CreateObject; @@ -29,6 +31,9 @@ class SellerCreateJpaServiceUnitTest { @Autowired private MemberRepository memberRepository; + @Autowired + private AccountRepository accountRepository; + private Member member; private Long memberId; private Long memberId2; @@ -38,10 +43,15 @@ class SellerCreateJpaServiceUnitTest { @DisplayName("회원가입과 판매자 신청을 진행 하고 memberId와 sellerId가 정상적으로 반환되는지 확인한다.") @BeforeEach public void signUp_getMemberId() { - member = memberRepository.save(CreateObject.getCreateMemberRequest("test1@naver.com").toMember()); + String email1 = "test1@naver.com"; + String email2 = "test2@naver.com"; + + Account account = accountRepository.save(CreateObject.getAccount(email1)); + member = memberRepository.save(CreateObject.getCreateMemberRequest(email1).toMember(account.getAccountId())); memberId = member.getMemberId(); - member = memberRepository.save(CreateObject.getCreateMemberRequest("test2@naver.com").toMember()); + account = accountRepository.save(CreateObject.getAccount(email2)); + member = memberRepository.save(CreateObject.getCreateMemberRequest(email2).toMember(account.getAccountId())); memberId2 = member.getMemberId(); Long sellerId = sellerService.sellerSave(memberId, getCreateSellerRequest()); diff --git a/src/test/java/org/store/clothstar/member/util/CreateObject.java b/src/test/java/org/store/clothstar/member/util/CreateObject.java index a7a872b8..4133ec17 100644 --- a/src/test/java/org/store/clothstar/member/util/CreateObject.java +++ b/src/test/java/org/store/clothstar/member/util/CreateObject.java @@ -1,9 +1,29 @@ package org.store.clothstar.member.util; +import org.store.clothstar.member.domain.Account; import org.store.clothstar.member.domain.Member; import org.store.clothstar.member.dto.request.CreateMemberRequest; public class CreateObject { + public static Account getAccount() { + String email = "test3@test.com"; + String password = "testl122"; + + return Account.builder() + .email(email) + .password(password) + .build(); + } + + public static Account getAccount(String email) { + String password = "testl122"; + + return Account.builder() + .email(email) + .password(password) + .build(); + } + public static CreateMemberRequest getCreateMemberRequest() { String email = "test3@test.com"; String password = "testl122"; @@ -43,7 +63,7 @@ public static CreateMemberRequest getCreateMemberRequest(String email, String ce return createMemberRequest; } - public static Member getMemberByCreateMemberRequestDTO() { - return getCreateMemberRequest().toMember(); + public static Member getMemberByCreateMemberRequestDTO(Long memberId) { + return getCreateMemberRequest().toMember(memberId); } } diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml index 8882060f..6aeca4e5 100644 --- a/src/test/resources/application-test.yml +++ b/src/test/resources/application-test.yml @@ -1,6 +1,7 @@ spring: datasource: url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE # h2 support in-memory-db + # url: jdbc:h2:tcp://localhost/~/clothstar2 # h2 support in-memory-db username: sa password: driver-class-name: org.h2.Driver