Skip to content

Commit 85246d2

Browse files
authored
refactor/#257 Carousel, FileEntity간 ID 참조 방식으로 관계 매핑 변경 (#258)
* refactor: Carousel, FileEntity 간 ID 참조 관게 매핑으로 변경 * refactor: 리팩토링으로 인한 테스트 코드 의존성 변경 * refactor: jacoco 버전 호환성 문제로 인해 0.8.12로 업그레이드 * refactor: CarouselFacade Stream NPE 방지 * refactor: Carousel FileId 컬럼 NOT NULL 제약조건 설정 * refactor: findPhysicalPathById ID로 인한 NPE 방지 * refactor: CarouselAdminFacade 클래스 레벨에 @transactional 어노테이션 적용
1 parent 4e84fae commit 85246d2

File tree

21 files changed

+106
-48
lines changed

21 files changed

+106
-48
lines changed

aics-admin/src/main/java/kgu/developers/admin/carousel/application/CarouselAdminFacade.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,17 @@
1212
import lombok.RequiredArgsConstructor;
1313

1414
@Component
15+
@Transactional
1516
@RequiredArgsConstructor
1617
public class CarouselAdminFacade {
1718
private final CarouselCommandService carouselCommandService;
1819
private final CarouselQueryService carouselQueryService;
1920

20-
@Transactional
2121
public CarouselPersistResponse createCarousel(Long fileId, CarouselRequest request) {
2222
Long id = carouselCommandService.createCarousel(fileId, request.text(), request.link());
2323
return CarouselPersistResponse.of(id);
2424
}
2525

26-
@Transactional
2726
public void updateCarousel(Long id, CarouselUpdateRequest request) {
2827
Carousel carousel = carouselQueryService.getById(id);
2928
carouselCommandService.updateCarousel(carousel, request.link(), request.text(), request.fileId());

aics-admin/src/testFixtures/java/carousel/application/CarouselAdminFacadeTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public class CarouselAdminFacadeTest {
2525
private Carousel carousel;
2626

2727
private static final Long TEST_FILE_ID = 1L;
28-
private static final Long SAVE_TARGET_ID = 1L;
2928

3029
@BeforeEach
3130
public void init() {
@@ -83,7 +82,7 @@ public void updateCarousel_Success() {
8382
// then
8483
assertEquals(request.text(), carousel.getText());
8584
assertEquals(request.link(), carousel.getLink());
86-
assertEquals(request.fileId(), carousel.getFile().getId());
85+
assertEquals(request.fileId(), carousel.getFileId());
8786
}
8887

8988
@Test

aics-api/src/main/java/kgu/developers/api/carousel/application/CarouselFacade.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,28 @@
55
import org.springframework.stereotype.Component;
66

77
import kgu.developers.api.carousel.presentation.response.CarouselListResponse;
8+
import kgu.developers.api.carousel.presentation.response.CarouselResponse;
89
import kgu.developers.domain.carousel.application.query.CarouselQueryService;
9-
import kgu.developers.domain.carousel.domain.Carousel;
10+
import kgu.developers.domain.file.application.query.FileQueryService;
1011
import lombok.RequiredArgsConstructor;
1112

1213
@Component
1314
@RequiredArgsConstructor
1415
public class CarouselFacade {
1516
private final CarouselQueryService carouselQueryService;
17+
private final FileQueryService fileQueryService;
1618

1719
public CarouselListResponse getCarousels() {
18-
List<Carousel> carousels = carouselQueryService.getAllCarousels();
20+
List<CarouselResponse> carousels = carouselQueryService.getAllCarousels()
21+
.stream()
22+
.map(carousel -> {
23+
Long fileId = carousel.getFileId();
24+
String filePath = (fileId != null) ? fileQueryService.getFilePhysicalPath(fileId) : null;
25+
return CarouselResponse.of(carousel, filePath);
26+
})
27+
.toList();
28+
1929
return CarouselListResponse.from(carousels);
2030
}
2131
}
32+

aics-api/src/main/java/kgu/developers/api/carousel/presentation/response/CarouselListResponse.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.List;
66

77
import io.swagger.v3.oas.annotations.media.Schema;
8-
import kgu.developers.domain.carousel.domain.Carousel;
98
import lombok.Builder;
109

1110
@Builder
@@ -25,11 +24,9 @@ public record CarouselListResponse(
2524
requiredMode = REQUIRED)
2625
List<CarouselResponse> contents
2726
) {
28-
public static CarouselListResponse from(List<Carousel> carousels) {
27+
public static CarouselListResponse from(List<CarouselResponse> carousels) {
2928
return CarouselListResponse.builder()
30-
.contents(carousels.stream()
31-
.map(CarouselResponse::from)
32-
.toList())
29+
.contents(carousels)
3330
.build();
3431
}
3532
}

aics-api/src/main/java/kgu/developers/api/carousel/presentation/response/CarouselResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ public record CarouselResponse(
2525
requiredMode = NOT_REQUIRED)
2626
FilePathResponse file
2727
) {
28-
public static CarouselResponse from(Carousel carousel) {
28+
public static CarouselResponse of(Carousel carousel, String physicalPath) {
2929
return CarouselResponse.builder()
3030
.id(carousel.getId())
3131
.text(carousel.getText())
3232
.link(carousel.getLink())
33-
.file(carousel.getFile() != null ? FilePathResponse.from(carousel.getFile()) : null)
33+
.file(carousel.getFileId() != null ? FilePathResponse.of(carousel.getFileId(), physicalPath) : null)
3434
.build();
3535
}
3636
}

aics-api/src/testFixtures/java/carousel/application/CarouselFacadeTest.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
import kgu.developers.api.carousel.presentation.response.CarouselListResponse;
1111
import kgu.developers.domain.carousel.application.query.CarouselQueryService;
1212
import kgu.developers.domain.carousel.domain.Carousel;
13+
import kgu.developers.domain.file.application.query.FileQueryService;
1314
import kgu.developers.domain.file.domain.FileEntity;
1415
import mock.repository.FakeCarouselRepository;
16+
import mock.repository.FakeFileRepository;
1517

1618
public class CarouselFacadeTest {
1719
private CarouselFacade carouselFacade;
1820

1921
private static final int TARGET_CAROUSEL_SIZE = 2;
22+
private static final Long FAKE_FILE_ID = 1L;
2023

2124
@BeforeEach
2225
public void init() {
@@ -25,19 +28,21 @@ public void init() {
2528

2629
private void initializeCarouselFacade() {
2730
FakeCarouselRepository fakeCarouselRepository = new FakeCarouselRepository();
31+
FakeFileRepository fakeFileRepository = new FakeFileRepository();
2832
carouselFacade = new CarouselFacade(
29-
new CarouselQueryService(fakeCarouselRepository)
33+
new CarouselQueryService(fakeCarouselRepository),
34+
new FileQueryService(fakeFileRepository)
3035
);
3136
saveTestCarousel(fakeCarouselRepository);
3237
}
3338

3439
private static void saveTestCarousel(FakeCarouselRepository fakeCarouselRepository) {
3540
fakeCarouselRepository.save(
36-
Carousel.create("컴퓨터공학부 홈페이지 메인 이미지", "https://kgu.ac.kr", FileEntity.builder().build())
41+
Carousel.create("컴퓨터공학부 홈페이지 메인 이미지", "https://kgu.ac.kr", FAKE_FILE_ID)
3742
);
3843

3944
fakeCarouselRepository.save(
40-
Carousel.create("SW 중심대학 선정", "https://kgu.ac.kr", FileEntity.builder().build())
45+
Carousel.create("SW 중심대학 선정", "https://kgu.ac.kr", FAKE_FILE_ID)
4146
);
4247
}
4348

aics-domain/src/main/java/kgu/developers/domain/carousel/application/command/CarouselCommandService.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,17 @@ public class CarouselCommandService {
1717

1818
public Long createCarousel(Long fileId, String text, String link) {
1919
FileEntity file = fileQueryService.getFileById(fileId);
20-
Carousel carousel = Carousel.create(text, link, file);
20+
Carousel carousel = Carousel.create(text, link, file.getId());
2121
return carouselRepository.save(carousel).getId();
2222
}
2323

2424
@Transactional
2525
public void updateCarousel(Carousel carousel, String link, String text, Long fileId) {
2626
carousel.updateText(text);
2727
carousel.updateLink(link);
28-
29-
FileEntity file = null;
30-
if (fileId != null) {
31-
file = fileQueryService.getFileById(fileId);
32-
}
33-
34-
carousel.updateFile(file);
28+
carousel.updateFileId(fileId);
3529
}
30+
3631
public void deleteCarouselById(Long id) {
3732
carouselRepository.deleteById(id);
3833
}

aics-domain/src/main/java/kgu/developers/domain/carousel/domain/Carousel.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package kgu.developers.domain.carousel.domain;
22

3-
import static jakarta.persistence.CascadeType.REMOVE;
43
import static jakarta.persistence.GenerationType.IDENTITY;
54
import static lombok.AccessLevel.PROTECTED;
65

76
import jakarta.persistence.Column;
87
import jakarta.persistence.Entity;
98
import jakarta.persistence.GeneratedValue;
109
import jakarta.persistence.Id;
11-
import jakarta.persistence.JoinColumn;
12-
import jakarta.persistence.OneToOne;
1310
import kgu.developers.common.domain.BaseTimeEntity;
14-
import kgu.developers.domain.file.domain.FileEntity;
1511
import lombok.AllArgsConstructor;
1612
import lombok.Builder;
1713
import lombok.Getter;
@@ -33,15 +29,14 @@ public class Carousel extends BaseTimeEntity {
3329
@Column(nullable = false)
3430
private String link;
3531

36-
@OneToOne(cascade = REMOVE)
37-
@JoinColumn(name = "file_id", nullable = false)
38-
private FileEntity file;
32+
@Column(nullable = false)
33+
private Long fileId;
3934

40-
public static Carousel create(String text, String link, FileEntity file) {
35+
public static Carousel create(String text, String link, Long fileId) {
4136
return Carousel.builder()
4237
.text(text)
4338
.link(link)
44-
.file(file)
39+
.fileId(fileId)
4540
.build();
4641
}
4742

@@ -53,8 +48,8 @@ public void updateLink(String link) {
5348
this.link = link;
5449
}
5550

56-
public void updateFile(FileEntity file) {
57-
this.file = file;
51+
public void updateFileId(Long fileId) {
52+
this.fileId = fileId;
5853
}
5954
}
6055

aics-domain/src/main/java/kgu/developers/domain/carousel/infrastructure/CarouselRepositoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void deleteById(Long id) {
2626

2727
@Override
2828
public List<Carousel> findAllByFileIsNotNullOrderByCreatedAtDesc() {
29-
return jpaCarouselRepository.findAllByFileIsNotNullOrderByCreatedAtDesc();
29+
return jpaCarouselRepository.findAllByFileIdIsNotNullOrderByCreatedAtDesc();
3030
}
3131

3232
@Override

aics-domain/src/main/java/kgu/developers/domain/carousel/infrastructure/JpaCarouselRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
import kgu.developers.domain.carousel.domain.Carousel;
88

99
public interface JpaCarouselRepository extends JpaRepository<Carousel, Long> {
10-
List<Carousel> findAllByFileIsNotNullOrderByCreatedAtDesc();
10+
List<Carousel> findAllByFileIdIsNotNullOrderByCreatedAtDesc();
1111
}

0 commit comments

Comments
 (0)