Skip to content

Commit

Permalink
이미지 업데이트api 분리
Browse files Browse the repository at this point in the history
 -feature
  • Loading branch information
Guiwoo committed Oct 3, 2022
1 parent 825b64b commit 5f62640
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,14 @@ public ApiResult<?> apiGEt(
//회원정보수정
@PatchMapping("")
public ApiResult<?> apiEdit(
MultipartFile multipartFileList,
@Validated MemberEdit.Request req
){
memberService.editUser(req,multipartFileList);
memberService.editUser(req);
return success(null);
}
@PatchMapping("image")
public ApiResult<?> apiProfileImageEdit(MultipartFile multipartFileList){
memberService.updateImage(multipartFileList);
return success(null);
}

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/workduo/member/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,7 @@ public void terminate(){
this.memberStatus = MemberStatus.MEMBER_STATUS_WITHDRAW;
this.deletedAt = LocalDateTime.now();
}
public void updateImage(String imgPath) {
this.profileImg = imgPath;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
public interface MemberService extends UserDetailsService {
MemberAuthenticateDto authenticateUser(MemberLogin.Request member);
void createUser(MemberCreate.Request create);
void editUser(MemberEdit.Request req, MultipartFile multipartFile);
void editUser(MemberEdit.Request req);
void changePassword(MemberChangePassword.Request req);
void withdraw(GroupService groupService);
MemberProfileDto getUser(Long memberId, Pageable pageable);

void updateImage(MultipartFile multipartFileList);
}
Original file line number Diff line number Diff line change
Expand Up @@ -130,11 +130,10 @@ public void createUser(MemberCreate.Request create) {
* @param multipartFile
*/
@Override
public void editUser(MemberEdit.Request edit, MultipartFile multipartFile) {
public void editUser(MemberEdit.Request edit) {
Member m = validCheckLoggedInUser();

validationEditDate(edit,m);
profileImgUpdate(edit, multipartFile, m);
m.updateUserInfo(edit);

updateActiveArea(m,edit.getSiggAreaList());
Expand Down Expand Up @@ -188,6 +187,18 @@ public MemberProfileDto getUser(Long memberId, Pageable pageable) {

return MemberProfileDto.from(m,list);
}

/**
* image update api 분리
* @param multipartFileList
*/
@Override
public void updateImage(MultipartFile multipartFileList) {
Member m = validCheckLoggedInUser();

profileImgUpdate(multipartFileList,m);
}

// Helper 메서드
@Transactional(readOnly = true)
public void validCheckActiveMember(Member m){
Expand Down Expand Up @@ -396,7 +407,7 @@ private boolean emailDuplicateCheck(String email){
private String generatePath(Long memberId) {
return "member/" + memberId+"/";
}
private void profileImgUpdate(MemberEdit.Request edit, MultipartFile multipartFile, Member m) {
private void profileImgUpdate(MultipartFile multipartFile, Member m) {
if(!multipartFile.isEmpty()){
if(StringUtils.hasText(m.getProfileImg())){
String parseAwsUrl = AwsS3Provider.parseAwsUrl(m.getProfileImg());
Expand All @@ -411,7 +422,7 @@ private void profileImgUpdate(MemberEdit.Request edit, MultipartFile multipartFi
throw new AmazonS3Exception("파일 업로드에 실패하였습니다.");
}

edit.setProfileImg(result.get(0));
m.updateImage(result.get(0));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ void createSuccess() throws Exception {
class EditProfie {
@Test
@DisplayName("계정 수정 실패[리퀘스트 검증 테스트]")
void editFailDoesNotExistData() throws Exception {
void editFailDoesNotExistData() {
List<String> errors = new ArrayList<>(
List.of(
"유저이름 은 필수 입력 사항 입니다.",
Expand All @@ -229,15 +229,9 @@ void editFailDoesNotExistData() throws Exception {
@Test
@DisplayName("계정 수정 성공")
void editSuccess() throws Exception {
MockMultipartFile image = new MockMultipartFile(
"multipartFiles",
"imagefile.jpeg",
"image/jpeg",
"<<jpeg data>>".getBytes()
);

MemberEdit.Request reqeust = MemberEdit.Request.builder().build();
doNothing().when(memberService).editUser(reqeust,image);
doNothing().when(memberService).editUser(reqeust);
mockMvc.perform(patch("/api/v1/member")
.param("username", "test")
.param("phoneNumber", "1")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,21 +353,14 @@ class TestEditMethod{
.sportList(sportList)
.build();

MockMultipartFile image = new MockMultipartFile(
"multipartFiles",
"imagefile.jpeg",
"image/jpeg",
"<<jpeg data>>".getBytes()
);

@Test
@DisplayName("회원정보 수정 실패[이메일 이 없는경우]")
void emailDoesNotExist(){
given(commonRequestContext.getMemberEmail()).willReturn("");
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_EMAIL_ERROR,exception.getErrorCode());
Expand All @@ -382,7 +375,7 @@ void tokenMailDoesNotEqualMemberEmail(){
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_ERROR_NEED_LOGIN,exception.getErrorCode());
Expand All @@ -397,7 +390,7 @@ void nicknameDuplicateCheckFail(){
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_NICKNAME_DUPLICATE,exception.getErrorCode());
Expand All @@ -413,7 +406,7 @@ void phoneNumberDuplicateCheckFail(){
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_PHONE_DUPLICATE,exception.getErrorCode());
Expand All @@ -429,7 +422,7 @@ void doesNotExistSiggData(){
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_SIGG_ERROR,exception.getErrorCode());
Expand All @@ -446,50 +439,75 @@ void doesNotExistSportData(){
//when
MemberException exception = assertThrows(
MemberException.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.editUser(editRequest)
);
//then
assertEquals(MEMBER_SPORT_ERROR,exception.getErrorCode());
}

@Test
@DisplayName("회원정보 수정 실패[aws s3 업로드 실패시 ]")
void failUploadToS3(){
@DisplayName("회원정보 수정 성공")
void successEditProfile(){
Member m = Member.builder().profileImg("aws.com/hehe/i/updated ?").email("test").build();
doReturn(Optional.of(m)).when(memberRepository).findByEmail(any());
given(commonRequestContext.getMemberEmail()).willReturn("test");
given(siggAreaRepository.existsBySgg(any())).willReturn(true);
given(siggAreaRepository.findBySgg(any())).willReturn(Optional.of(SiggArea.builder().build()));
given(sportRepository.existsById(any())).willReturn(true);
given(sportRepository.findById(any())).willReturn(Optional.of(Sport.builder().build()));
// given(awsS3Provider.deleteFile(any())).willReturn(true);
// given(awsS3Provider.uploadFile(any(),any()))
// .willReturn(List.of("hehe/i/updated ?"));

memberService.editUser(editRequest);
//then
verify(sportRepository,times(sportList.size())).findById(any());
verify(siggAreaRepository,times(sggList.size())).findBySgg(any());
// verify(awsS3Provider,times(1)).uploadFile(any(), any());
}
}
@Nested
@DisplayName("이미지 업데이트 테스트")
class testImgUpdate{

MockMultipartFile image = new MockMultipartFile(
"multipartFiles",
"imagefile.jpeg",
"image/jpeg",
"<<jpeg data>>".getBytes()
);

@Test
@DisplayName("이미지 업데이트 실패[aws s3 업로드 실패시 ]")
void failUploadToS3(){
Member m = Member.builder().profileImg("aws.com/hehe/i/updated ?").email("test").build();
doReturn(Optional.of(m)).when(memberRepository).findByEmail(any());
given(commonRequestContext.getMemberEmail()).willReturn("test");

//when
AmazonS3Exception exception = assertThrows(
AmazonS3Exception.class,
()-> memberService.editUser(editRequest,image)
()-> memberService.updateImage(image)
);
//then
assertEquals("파일 업로드에 실패하였습니다.",exception.getErrorMessage());
}

@Test
@DisplayName("회원정보 수정 성공")
void successEditProfile(){
@DisplayName("회원정보 수정 실패[aws s3 업로드 실패시 ]")
void successUploadToS3(){
Member m = Member.builder().profileImg("aws.com/hehe/i/updated ?").email("test").build();
doReturn(Optional.of(m)).when(memberRepository).findByEmail(any());
given(commonRequestContext.getMemberEmail()).willReturn("test");
given(siggAreaRepository.existsBySgg(any())).willReturn(true);
given(siggAreaRepository.findBySgg(any())).willReturn(Optional.of(SiggArea.builder().build()));
given(sportRepository.existsById(any())).willReturn(true);
given(sportRepository.findById(any())).willReturn(Optional.of(Sport.builder().build()));
given(awsS3Provider.deleteFile(any())).willReturn(true);
given(awsS3Provider.uploadFile(any(),any()))
.willReturn(List.of("hehe/i/updated ?"));

memberService.editUser(editRequest,image);
memberService.updateImage(image);
//then
verify(sportRepository,times(sportList.size())).findById(any());
verify(siggAreaRepository,times(sggList.size())).findBySgg(any());
verify(awsS3Provider,times(1)).uploadFile(any(), any());
}

}
@Nested
@DisplayName("비밀번호 수정 메서드 테스트")
Expand Down

0 comments on commit 5f62640

Please sign in to comment.