-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🚀 Feature image enhancement #85
base: feature
Are you sure you want to change the base?
Conversation
혹시 빌드쪽에서 에러가 나는 것 같은데 확인 한 번만 부탁드려도 괜찮을까욥! |
적어놓긴 했는데 지금 jacoco 통과를 못하고 있고 테스트에 대한 여러분의 생각을 듣고 싶어요 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전반적으로 코드 리팩토링한 내용이었는데 클래스 분리, Enum validator 설정 덕분에 더 코드가 깔끔해진 것 같네요!
빌드 에러가 나는 부분 써주신 것을 못봤네요ㅠㅠㅠ 지금 확인했습니다!
@Scheduled(cron = CRON, zone = TIMEZONE) // 매월 20일 오전 00시 10분에 실행 | ||
@Async | ||
@Transactional | ||
public void deleteUnused(){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
private static String getUniqueFileName(MultipartFile file) { | ||
String randomUUID = UUID.randomUUID().toString(); | ||
String originalFileName = file.getOriginalFilename(); | ||
|
||
return randomUUID + originalFileName; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
@@ -3,7 +3,6 @@ | |||
import com.backendoori.ootw.avatar.domain.ItemType; | |||
import com.backendoori.ootw.avatar.domain.Sex; | |||
import com.backendoori.ootw.common.validation.Enum; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
원래는 여기서 Enum 어노테이션 정의된 클래스가 지금 바뀐 PR에는 src/main/java/com/backendoori/ootw/image/validation/Enum.java
여기인 걸로 아는데 경로가 안바뀌어서 그런 것일까요..?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인이 필요하겠네요
제가 생각해본 테스트 방법에 대해서 아래 의견 남겨둡니다!
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
존재하지 않는 이미지가 언제 생성될까? 생각해보면 게시글의 업데이트가 가장 보편적일 것 같은데
사실 프로덕션 전이어서 서비스 차원에서 도입이 필요한지 정하기는 애매한 문제인 것 같아요
스케줄링에 대한 주기를 판단하기 어렵기도 하고요!
테스트 통과 과정에서 어려움이 있으니 추후 논의를 빠르게 가져봐야겠네요
List<String> urls = new ArrayList<>(); | ||
|
||
postRepository.findAll() | ||
.stream() | ||
.map(Post::getImageUrl) | ||
.forEach(urls::add); | ||
|
||
avatarItemRepository.findAll() | ||
.stream() | ||
.map(AvatarItem::getImageUrl) | ||
.forEach(urls::add); | ||
|
||
List<Image> images = imageRepository.findAll(); | ||
|
||
for(Image image : images){ | ||
if(!urls.contains(image.getImageUrl())){ | ||
imageService.delete(image.getFileName()); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
배열을 사용하다 보니 이미지 수가 많을 경우에는 시간이 상당히 오래걸릴 수 있겠네요
그리고 47번 행에서의 for문 로직도 stream으로 처리하면 좋을 것 같아요
filter
에서 delete를 하면 되니까요
@@ -3,7 +3,6 @@ | |||
import com.backendoori.ootw.avatar.domain.ItemType; | |||
import com.backendoori.ootw.avatar.domain.Sex; | |||
import com.backendoori.ootw.common.validation.Enum; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인이 필요하겠네요
@NotNull | ||
private static String getUniqueFileName(MultipartFile file) { | ||
String randomUUID = UUID.randomUUID().toString(); | ||
String originalFileName = file.getOriginalFilename(); | ||
|
||
return randomUUID + originalFileName; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 부분의 파라미터로 file 자체가 아닌 file name을 바로 주는 것도 좋을 것 같아요
그리고 uuid랑 original file name 사이에 구분자가 들어가면 좋을 것 같아요
최종적으로 만든 file name은 s3 name convention을 준수하는지 확인해보면 좋을 것 같습니다
String message() default "유효하지 않은 값입니다 다시 입력해주세요"; | ||
Class<?>[] groups() default {}; | ||
Class<? extends Payload>[] payload() default {}; | ||
Class<? extends java.lang.Enum<?>> enumClass(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인터페이스에서는 모든 행에 대한 개행이 필요할 것 같아요
static Stream<Arguments> provideInvalidAvatarImageInfo() { | ||
String validType = "HAIR"; | ||
String validSex = "MALE"; | ||
return java.util.stream.Stream.of( | ||
Arguments.of(null, validSex), | ||
Arguments.of(validType, null), | ||
Arguments.of("", validSex), | ||
Arguments.of(validType, ""), | ||
Arguments.of(" ", validSex), | ||
Arguments.of(validType, " "), | ||
Arguments.of("hair", validSex), | ||
Arguments.of(validType, "female") | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 full package 를 명시해주신 이유가 있나요?
@Column(name = "filename") | ||
private String fileName; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fileName
도 unique면 좋을 것 같습니다
image_url varchar(500) NOT NULL, | ||
filename varchar(255) NOT NULL, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
두 컬럼 모두 unique인 것 같은데 맞을까요?
✅ 요구사항
🚀 주요 변경사항
💡 기타사항
EnumValidator
가 jacoco 범위에 포함되지 않아 문제가 발생하는데 새로 추가한 테스트에서도 debuging을 찍을 시 항상 거쳐 가는 것을 확인해 어떤 문제인지 같이 고민해보고 싶습니다.