-
Notifications
You must be signed in to change notification settings - Fork 2
[DDING-000] VodProcessingJob 필드 수정 #204
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
Conversation
워크스루이 풀 리퀘스트는 비디오 처리 작업(VodProcessingJob)과 파일 메타데이터(FileMetaData) 간의 관계를 구현합니다. 새로운 변경 사항
가능한 관련 PR들
제안된 레이블
제안된 리뷰어
Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
|
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.
Actionable comments posted: 1
🧹 Nitpick comments (8)
src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/controller/dto/request/CreatePendingVodProcessingJobRequest.java (1)
13-15
: 오타 수정이 필요합니다검증 메시지에 오타가 있습니다: "빌수입니다" → "필수입니다"
- @NotNull(message = "파일Id는 빌수입니다.") + @NotNull(message = "파일Id는 필수입니다.")src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/entity/VodProcessingJob.java (2)
33-35
: cascade 설정 검토가 필요합니다FileMetaData와의 일대일 관계에서 cascade 동작을 명시적으로 정의하는 것이 좋습니다. VodProcessingJob이 삭제될 때 FileMetaData의 처리 방식을 명확히 해야 합니다.
- @OneToOne(fetch = FetchType.LAZY) + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumn(name = "file_meta_data_id") private FileMetaData fileMetaData;
47-54
: 생성자 매개변수 정렬이 필요합니다가독성을 위해 생성자의 매개변수를 더 깔끔하게 정렬하는 것이 좋습니다.
- private VodProcessingJob(Long id, VodProcessingNotification vodProcessingNotification, FileMetaData fileMetaData, - String convertJobId, String userId, ConvertJobStatus convertJobStatus) { + private VodProcessingJob( + Long id, + VodProcessingNotification vodProcessingNotification, + FileMetaData fileMetaData, + String convertJobId, + String userId, + ConvertJobStatus convertJobStatus + ) {src/test/java/ddingdong/ddingdongBE/domain/vodprocessing/service/FacadeGeneralVodProcessingJobServiceTest.java (3)
29-30
: 생성자 주입 방식으로 변경 권장
@Autowired
필드 주입보다는 생성자 주입 방식을 사용하는 것이 권장됩니다. 이는 다음과 같은 이점이 있습니다:
- 불변성 보장
- 순환 참조 방지
- 테스트 용이성 향상
다음과 같이 변경하는 것을 추천드립니다:
- @Autowired - private FacadeVodProcessingJobService facadeVodProcessingJobService; - @Autowired - private VodProcessingJobRepository vodProcessingJobRepository; - @Autowired - private FileMetaDataRepository fileMetaDataRepository; + private final FacadeVodProcessingJobService facadeVodProcessingJobService; + private final VodProcessingJobRepository vodProcessingJobRepository; + private final FileMetaDataRepository fileMetaDataRepository; + + public FacadeGeneralVodProcessingJobServiceTest( + FacadeVodProcessingJobService facadeVodProcessingJobService, + VodProcessingJobRepository vodProcessingJobRepository, + FileMetaDataRepository fileMetaDataRepository) { + this.facadeVodProcessingJobService = facadeVodProcessingJobService; + this.vodProcessingJobRepository = vodProcessingJobRepository; + this.fileMetaDataRepository = fileMetaDataRepository; + }
36-38
: 테스트 헬퍼 메서드 추출 권장테스트 데이터 생성 로직을 별도의 헬퍼 메서드로 추출하면 테스트 코드의 가독성과 재사용성이 향상됩니다.
다음과 같이 변경하는 것을 추천드립니다:
+ private FileMetaData createTestFileMetaData() { + UUID fileId = UuidCreator.getTimeBased(); + FileMetaData fileMetaData = FileMetaData.createPending(fileId, "test", "test"); + return fileMetaDataRepository.save(fileMetaData); + } @Test void createPendingVodProcessingJob() { //given - UUID fileId = UuidCreator.getTimeBased(); - FileMetaData fileMetaData = FileMetaData.createPending(fileId, "test", "test"); - FileMetaData savedFileMetaData = fileMetaDataRepository.save(fileMetaData); + FileMetaData savedFileMetaData = createTestFileMetaData();
51-56
: 테스트 검증 강화 필요현재 테스트는 기본적인 필드만 검증하고 있습니다. FileMetaData와의 관계에 대해 더 자세한 검증이 필요합니다.
다음과 같이 검증을 강화하는 것을 추천드립니다:
assertThat(result.get()) .extracting( VodProcessingJob::getConvertJobId, VodProcessingJob::getUserId, VodProcessingJob::getConvertJobStatus) .containsExactly(convertJobId, userId, PENDING); - assertThat(result.get().getFileMetaData().getId()).isEqualTo(fileId); + assertThat(result.get().getFileMetaData()) + .extracting( + FileMetaData::getId, + FileMetaData::getOriginalName, + FileMetaData::getStoredName) + .containsExactly(fileId, "test", "test");src/main/resources/db/migration/V32__alter_table_vod_proceessing_job_add_column.sql (2)
Line range hint
7-9
: 외래 키에 대한 인덱스 추가 필요외래 키
file_meta_data_id
에 대한 인덱스가 없습니다. 조회 성능 향상을 위해 인덱스 추가를 권장드립니다.CREATE INDEX IX_VOD_PROCESSING_JOB_FILE_META_DATA_ID ON vod_processing_job (file_meta_data_id);
Line range hint
1-9
: 마이그레이션 파일명 오타 수정 필요파일명에 'proceessing'이라는 오타가 있습니다. 정확한 이력 관리를 위해 수정이 필요합니다.
파일명을 다음과 같이 수정해주세요:
- 현재:
V32__alter_table_vod_proceessing_job_add_column.sql
- 수정:
V32__alter_table_vod_processing_job_add_column.sql
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/controller/dto/request/CreatePendingVodProcessingJobRequest.java
(1 hunks)src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/entity/VodProcessingJob.java
(3 hunks)src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/service/FacadeVodProcessingJobServiceImpl.java
(2 hunks)src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/service/dto/command/CreatePendingVodProcessingJobCommand.java
(1 hunks)src/main/resources/db/migration/V32__alter_table_vod_proceessing_job_add_column.sql
(1 hunks)src/test/java/ddingdong/ddingdongBE/domain/vodprocessing/service/FacadeGeneralVodProcessingJobServiceTest.java
(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: Build and analyze
🔇 Additional comments (3)
src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/service/dto/command/CreatePendingVodProcessingJobCommand.java (1)
13-19
: 구현이 적절합니다FileMetaData를 포함하도록 수정된 toPendingVodProcessingJob 메서드의 구현이 적절합니다.
src/test/java/ddingdong/ddingdongBE/domain/vodprocessing/service/FacadeGeneralVodProcessingJobServiceTest.java (1)
Line range hint
63-67
: 테스트 데이터 불완전VodProcessingJob 엔티티에 FileMetaData가 추가되었으나, 테스트 데이터에는 이 관계가 포함되어 있지 않습니다.
테스트의 완전성을 위해 FileMetaData를 포함하도록 수정이 필요합니다:
vodProcessingJobRepository.save(VodProcessingJob.builder() .convertJobStatus(PENDING) .userId("1") .convertJobId("test") + .fileMetaData(createTestFileMetaData()) .build());
✅ Verification successful
테스트 데이터에 FileMetaData 관계가 누락되어 있습니다
VodProcessingJob 엔티티는 FileMetaData와의 @OnetoOne 관계가 필수적으로 필요합니다. 현재 테스트 데이터에서는 이 관계가 누락되어 있어 실제 운영 환경에서 문제가 발생할 수 있습니다.
다음과 같이 FileMetaData를 포함하도록 테스트를 수정해야 합니다:
FileMetaData fileMetaData = fileMetaDataService.getById("fileId"); vodProcessingJobRepository.save(VodProcessingJob.builder() .convertJobStatus(PENDING) .userId("1") .convertJobId("test") .fileMetaData(fileMetaData) // FileMetaData 관계 추가 .build());🏁 Scripts executed
The following scripts were executed for the analysis:
Error: No shell scripts found
Script:
#!/bin/bash # Find VodProcessingJob entity definition echo "=== VodProcessingJob Entity Definition ===" ast-grep --pattern 'class VodProcessingJob { $$$ }' # Find FileMetaData relationship in VodProcessingJob echo -e "\n=== FileMetaData Relationship ===" rg "FileMetaData" -A 5 -B 5 # Find test files using VodProcessingJob echo -e "\n=== Test Files Using VodProcessingJob ===" fd "Test.java" --exec grep -l "VodProcessingJob" # Look for test helper methods echo -e "\n=== Test Helper Methods ===" rg "createTestFileMetaData|createMockFileMetaData" -A 5Length of output: 76117
Script:
#!/bin/bash # Find VodProcessingJob entity definition and its relationship with FileMetaData echo "=== VodProcessingJob Entity Definition ===" rg -B 5 -A 10 "class VodProcessingJob" # Find builder patterns in VodProcessingJob echo -e "\n=== VodProcessingJob Builder Patterns ===" rg "VodProcessingJob\.builder\(\)" # Find any references to FileMetaData in VodProcessingJob related files echo -e "\n=== FileMetaData in VodProcessingJob ===" fd "VodProcessingJob" --exec grep -l "FileMetaData" {} \;Length of output: 5155
Script:
#!/bin/bash # Check FileMetaData relationship in VodProcessingJob entity echo "=== FileMetaData Relationship in VodProcessingJob ===" rg -B 5 -A 5 "FileMetaData" src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/entity/VodProcessingJob.java # Check FileMetaData usage in CreatePendingVodProcessingJobCommand echo -e "\n=== FileMetaData in CreatePendingVodProcessingJobCommand ===" rg -B 5 -A 5 "FileMetaData" src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/service/dto/command/CreatePendingVodProcessingJobCommand.java # Check implementation in FacadeVodProcessingJobServiceImpl echo -e "\n=== FileMetaData in FacadeVodProcessingJobServiceImpl ===" rg -B 5 -A 5 "FileMetaData" src/main/java/ddingdong/ddingdongBE/domain/vodprocessing/service/FacadeVodProcessingJobServiceImpl.javaLength of output: 3872
src/main/resources/db/migration/V32__alter_table_vod_proceessing_job_add_column.sql (1)
1-2
: NULL 허용 여부 검토 필요
file_meta_data_id
컬럼이 NULL을 허용하도록 설정되어 있습니다. 비즈니스 로직상 이 필드가 필수값이라면 NOT NULL 제약조건을 추가해야 합니다.ALTER TABLE vod_processing_job - ADD file_meta_data_id BINARY(16) NULL; + ADD file_meta_data_id BINARY(16) NOT NULL;✅ Verification successful
NULL 허용 설정이 적절해 보입니다
vod_processing_job
테이블의 기존 설계를 보면notification_id
와 같은 관계형 필드들이 NULL을 허용하도록 되어있습니다.file_meta_data_id
역시 이러한 패턴을 따르는 것이 일관성 있어 보입니다. 현재 NULL 허용 설정을 유지하시는 것을 추천드립니다.🏁 Scripts executed
The following scripts were executed for the analysis:
Error: No shell scripts found
Script:
#!/bin/bash # Find all migration scripts related to these tables fd -e sql . src/main/resources/db/migration # Search for references to file_meta_data table rg -l "file_meta_data" --type sql # Search for references to vod_processing_job table rg -l "vod_processing_job" --type sqlLength of output: 2933
Script:
#!/bin/bash # View the table creation scripts cat src/main/resources/db/migration/V29__create_tables_vod_processing.sql cat src/main/resources/db/migration/V10__create_file_meta_data_table.sql # Search for code references to these tables rg "vod_processing_job" --type java -A 5 -B 5Length of output: 1681
FileMetaData fileMetaData = fileMetaDataService.getById(command.fileId()); | ||
return vodProcessingJobService.save(command.toPendingVodProcessingJob(fileMetaData)); |
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.
FileMetaData 조회 실패에 대한 예외 처리가 필요합니다
fileMetaDataService.getById() 호출 시 FileMetaData를 찾을 수 없는 경우에 대한 예외 처리가 누락되었습니다.
@Transactional
public Long create(CreatePendingVodProcessingJobCommand command) {
- FileMetaData fileMetaData = fileMetaDataService.getById(command.fileId());
+ FileMetaData fileMetaData = fileMetaDataService.getById(command.fileId());
+ if (fileMetaData == null) {
+ throw new IllegalArgumentException("파일 메타데이터를 찾을 수 없습니다: " + command.fileId());
+ }
return vodProcessingJobService.save(command.toPendingVodProcessingJob(fileMetaData));
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
FileMetaData fileMetaData = fileMetaDataService.getById(command.fileId()); | |
return vodProcessingJobService.save(command.toPendingVodProcessingJob(fileMetaData)); | |
FileMetaData fileMetaData = fileMetaDataService.getById(command.fileId()); | |
if (fileMetaData == null) { | |
throw new IllegalArgumentException("파일 메타데이터를 찾을 수 없습니다: " + command.fileId()); | |
} | |
return vodProcessingJobService.save(command.toPendingVodProcessingJob(fileMetaData)); |
🚀 작업 내용
🤔 고민했던 내용
(Feed 기준 내 vodProcessingJob을 식별해야 함)
(VodPorcessingJob 기준 해당되는 Feed 식별해야 함)
💬 리뷰 중점사항
Summary by CodeRabbit
새로운 기능
개선 사항
기술적 변경