-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat(Member): 닉네임, 프로필 이미지 수정 API 구현 (#51)
* Feat(Member): 닉네임 수정api 구현 * Feat(Member): 프로필 이미지 수정 API 구현 * Fix(*): system.out 프린트 제거 * Fix(*): 잘못 옮긴 클래스 패키지 수정 * Feat(Member): image 수정API 결과 응답 추가
- Loading branch information
Showing
25 changed files
with
519 additions
and
10 deletions.
There are no files selected for viewing
2 changes: 1 addition & 1 deletion
2
jabiseo-api/src/main/java/com/jabiseo/auth/dto/LoginRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...in/java/com/jabiseo/common/EnumValid.java → ...m/jabiseo/common/validator/EnumValid.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
package com.jabiseo.common; | ||
package com.jabiseo.common.validator; | ||
|
||
|
||
|
||
|
24 changes: 24 additions & 0 deletions
24
jabiseo-api/src/main/java/com/jabiseo/common/validator/ImageValid.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.jabiseo.common.validator; | ||
|
||
import jakarta.validation.Constraint; | ||
import jakarta.validation.Payload; | ||
|
||
import java.lang.annotation.Documented; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
import java.lang.annotation.Target; | ||
|
||
import static java.lang.annotation.ElementType.FIELD; | ||
|
||
@Target({FIELD}) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
@Documented | ||
@Constraint(validatedBy = ImageValidator.class) | ||
public @interface ImageValid { | ||
|
||
String message() default "잘못된 이미지 형식입니다."; | ||
|
||
Class<?>[] groups() default {}; | ||
|
||
Class<? extends Payload>[] payload() default {}; | ||
} |
38 changes: 38 additions & 0 deletions
38
jabiseo-api/src/main/java/com/jabiseo/common/validator/ImageValidator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.jabiseo.common.validator; | ||
|
||
import jakarta.validation.ConstraintValidator; | ||
import jakarta.validation.ConstraintValidatorContext; | ||
import org.springframework.web.multipart.MultipartFile; | ||
|
||
import java.util.List; | ||
|
||
public class ImageValidator implements ConstraintValidator<ImageValid, MultipartFile> { | ||
|
||
private static final List<String> ALLOW_EXTENSION_LIST = List.of("jpg", "jpeg", "png", "avif", "webp"); | ||
private static final int MAX_IMAGE_SIZE = 5 * 1024 * 1024; // 5MB | ||
|
||
@Override | ||
public boolean isValid(MultipartFile file, ConstraintValidatorContext constraintValidatorContext) { | ||
if (file == null || file.isEmpty()) { | ||
return false; | ||
} | ||
|
||
if (file.getSize() > MAX_IMAGE_SIZE) { | ||
return false; | ||
} | ||
|
||
String fileExtension = getFileExtension(file.getOriginalFilename()); | ||
if (!ALLOW_EXTENSION_LIST.contains(fileExtension)) { | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
private String getFileExtension(String fileName) { | ||
if (fileName == null || fileName.isEmpty()) { | ||
return ""; | ||
} | ||
return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
.../jabiseo/common/ValueOfEnumValidator.java → ...ommon/validator/ValueOfEnumValidator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
jabiseo-api/src/main/java/com/jabiseo/member/application/usecase/UpdateNicknameUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.jabiseo.member.application.usecase; | ||
|
||
import com.jabiseo.member.domain.Member; | ||
import com.jabiseo.member.domain.MemberRepository; | ||
import com.jabiseo.member.dto.UpdateNicknameRequest; | ||
import com.jabiseo.member.dto.UpdateNicknameResponse; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Transactional | ||
public class UpdateNicknameUseCase { | ||
|
||
private final MemberRepository memberRepository; | ||
|
||
public UpdateNicknameResponse execute(Long memberId, UpdateNicknameRequest request) { | ||
Member member = memberRepository.getReferenceById(memberId); | ||
member.updateNickname(request.nickname()); | ||
return UpdateNicknameResponse.of(member); | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
...o-api/src/main/java/com/jabiseo/member/application/usecase/UpdateProfileImageUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package com.jabiseo.member.application.usecase; | ||
|
||
import com.jabiseo.member.domain.Member; | ||
import com.jabiseo.member.domain.MemberRepository; | ||
import com.jabiseo.member.dto.UpdateProfileImageRequest; | ||
import com.jabiseo.member.dto.UpdateProfileImageResponse; | ||
import com.jabiseo.s3.S3Uploader; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Transactional | ||
public class UpdateProfileImageUseCase { | ||
|
||
private final MemberRepository memberRepository; | ||
private final S3Uploader s3Uploader; | ||
private static final String PROFILE_IMAGE_PATH = "profile/"; | ||
|
||
public UpdateProfileImageResponse execute(Long memberId, UpdateProfileImageRequest request) { | ||
Member member = memberRepository.getReferenceById(memberId); | ||
String profileUrl = s3Uploader.upload(request.image(), PROFILE_IMAGE_PATH); | ||
member.updateProfileImage(profileUrl); | ||
return UpdateProfileImageResponse.of(member); | ||
} | ||
|
||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
jabiseo-api/src/main/java/com/jabiseo/member/dto/UpdateNicknameRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.jabiseo.member.dto; | ||
|
||
import jakarta.validation.constraints.NotBlank; | ||
|
||
public record UpdateNicknameRequest(@NotBlank String nickname) { | ||
} |
14 changes: 14 additions & 0 deletions
14
jabiseo-api/src/main/java/com/jabiseo/member/dto/UpdateNicknameResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.jabiseo.member.dto; | ||
|
||
import com.jabiseo.member.domain.Member; | ||
|
||
public record UpdateNicknameResponse(String nickname, | ||
String email, | ||
String profileImage, | ||
String memberId) { | ||
|
||
public static UpdateNicknameResponse of(Member member) { | ||
return new UpdateNicknameResponse(member.getNickname(), member.getEmail(), member.getProfileImage(), member.getId().toString()); | ||
} | ||
|
||
} |
7 changes: 7 additions & 0 deletions
7
jabiseo-api/src/main/java/com/jabiseo/member/dto/UpdateProfileImageRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.jabiseo.member.dto; | ||
|
||
import com.jabiseo.common.validator.ImageValid; | ||
import org.springframework.web.multipart.MultipartFile; | ||
|
||
public record UpdateProfileImageRequest(@ImageValid MultipartFile image) { | ||
} |
13 changes: 13 additions & 0 deletions
13
jabiseo-api/src/main/java/com/jabiseo/member/dto/UpdateProfileImageResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.jabiseo.member.dto; | ||
|
||
import com.jabiseo.member.domain.Member; | ||
|
||
public record UpdateProfileImageResponse(String nickname, | ||
String email, | ||
String profileImage, | ||
String memberId) { | ||
|
||
public static UpdateProfileImageResponse of(Member member) { | ||
return new UpdateProfileImageResponse(member.getNickname(), member.getEmail(), member.getProfileImage(), member.getId().toString()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
...o-api/src/test/java/com/jabiseo/member/application/usecase/UpdateNicknameUseCaseTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package com.jabiseo.member.application.usecase; | ||
|
||
import com.jabiseo.member.domain.Member; | ||
import com.jabiseo.member.domain.MemberRepository; | ||
import com.jabiseo.member.dto.UpdateNicknameRequest; | ||
import com.jabiseo.member.dto.UpdateNicknameResponse; | ||
import org.assertj.core.api.Assertions; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.BDDMockito; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
|
||
import static fixture.MemberFixture.createMember; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.junit.jupiter.api.Assertions.*; | ||
import static org.mockito.BDDMockito.given; | ||
|
||
@DisplayName("닉네임 수정 유스케이스 테스트") | ||
@ExtendWith(MockitoExtension.class) | ||
class UpdateNicknameUseCaseTest { | ||
|
||
@InjectMocks | ||
UpdateNicknameUseCase updateNicknameUseCase; | ||
|
||
@Mock | ||
MemberRepository memberRepository; | ||
|
||
UpdateNicknameRequest request; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
request = new UpdateNicknameRequest("newNickname"); | ||
} | ||
|
||
@Test | ||
@DisplayName("닉네임 수정 성공") | ||
void updateNicknameUseCaseSuccess() { | ||
//given | ||
Member member = createMember(1L); | ||
given(memberRepository.getReferenceById(member.getId())).willReturn(member); | ||
|
||
//when | ||
UpdateNicknameResponse result = updateNicknameUseCase.execute(member.getId(), request); | ||
|
||
//then | ||
assertThat(result.nickname()).isEqualTo(request.nickname()); | ||
} | ||
} |
Oops, something went wrong.