Skip to content

Commit d08be0b

Browse files
authored
refactor/KD-28 File 및 Carousel 도메인 엔티티 분리 (#269)
* refactor: file 도메인 모델과 엔티티 분리 * refactor: 패키지 구조 정리 * refactor: Carousel 도메인 엔티티 분리 * refactor: ID 상수화 및 날짜 필드 추가 * refactor: 필드명 오탈자 수정 * refactor: 코드래빗 리뷰 반영 * refactor: CarouselJpaEntity toEntity 메서드 빌더 사용 * refactor: 테이블 이름 명시 * refactor: fileId npe 방지
1 parent 705d629 commit d08be0b

File tree

40 files changed

+358
-231
lines changed

40 files changed

+358
-231
lines changed

aics-admin/src/main/java/kgu/developers/admin/file/application/FileAdminFacade.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import kgu.developers.domain.file.application.response.FilePathResponse;
77
import kgu.developers.domain.file.application.command.FileCommandService;
88
import kgu.developers.domain.file.domain.FileDomain;
9-
import kgu.developers.domain.file.domain.FileEntity;
10-
import kgu.developers.domain.file.infrastructure.FileStorageService;
9+
import kgu.developers.domain.file.domain.FileModel;
10+
import kgu.developers.domain.file.infrastructure.repository.FileStorageService;
1111
import lombok.RequiredArgsConstructor;
1212

1313
@Component
@@ -18,7 +18,7 @@ public class FileAdminFacade {
1818

1919
public FilePathResponse saveFile(MultipartFile file, FileDomain fileDomain) {
2020
String storedPath = fileStorageService.store(file, fileDomain);
21-
FileEntity savedFile = fileCommandService.saveFile(file, storedPath);
21+
FileModel savedFile = fileCommandService.saveFile(file, storedPath);
2222
return FilePathResponse.from(savedFile);
2323
}
2424
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import kgu.developers.domain.carousel.domain.Carousel;
1717
import kgu.developers.domain.carousel.exception.CarouselNotFoundException;
1818
import kgu.developers.domain.file.application.query.FileQueryService;
19-
import kgu.developers.domain.file.domain.FileEntity;
19+
import kgu.developers.domain.file.domain.FileModel;
2020
import mock.repository.FakeCarouselRepository;
2121
import mock.repository.FakeFileRepository;
2222

@@ -48,7 +48,7 @@ private void initializeCarouselAdminFacade() {
4848

4949
private static void saveTestFile(FakeFileRepository fakeFileRepository) {
5050
fakeFileRepository.save(
51-
FileEntity.create(
51+
FileModel.create(
5252
"경기대학교 AI컴퓨터공학부 메인 이미지",
5353
"/files/carousel/main_image.jpg",
5454
1234L,

aics-admin/src/testFixtures/java/lab/application/LabAdminFacadeTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import kgu.developers.admin.lab.presentation.request.LabCreateRequest;
1515
import kgu.developers.admin.lab.presentation.request.LabUpdateRequest;
1616
import kgu.developers.admin.lab.presentation.response.LabPersistResponse;
17-
import kgu.developers.domain.file.domain.FileEntity;
1817
import kgu.developers.domain.lab.application.command.LabCommandService;
1918
import kgu.developers.domain.lab.application.query.LabQueryService;
2019
import kgu.developers.domain.lab.domain.Lab;
@@ -36,7 +35,6 @@ public void init() {
3635
new LabQueryService(fakeLabRepository)
3736
);
3837

39-
fakeFileRepository.save(FileEntity.builder().id(TEST_FILE_ID).build());
4038
fakeLabRepository.save(Lab.builder()
4139
.name("Lab A")
4240
.loc("8500")

aics-api/src/main/java/kgu/developers/api/club/presentation/response/ClubDetailResponse.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import io.swagger.v3.oas.annotations.media.Schema;
77
import kgu.developers.domain.club.domain.Club;
88
import kgu.developers.domain.file.application.response.FilePathResponse;
9-
import kgu.developers.domain.file.domain.FileEntity;
109
import lombok.Builder;
1110

1211
@Builder

aics-api/src/main/java/kgu/developers/api/club/presentation/response/ClubListResponse.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import io.swagger.v3.oas.annotations.media.Schema;
77
import kgu.developers.domain.club.domain.Club;
8-
import kgu.developers.domain.file.domain.FileEntity;
98
import lombok.Builder;
109

1110
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import kgu.developers.domain.carousel.application.query.CarouselQueryService;
1212
import kgu.developers.domain.carousel.domain.Carousel;
1313
import kgu.developers.domain.file.application.query.FileQueryService;
14-
import kgu.developers.domain.file.domain.FileEntity;
1514
import mock.repository.FakeCarouselRepository;
1615
import mock.repository.FakeFileRepository;
1716

aics-api/src/testFixtures/java/lab/application/LabFacadeTest.java

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

77
import kgu.developers.domain.file.application.query.FileQueryService;
8-
import kgu.developers.domain.file.domain.FileEntity;
98
import mock.repository.FakeFileRepository;
109
import org.junit.jupiter.api.BeforeEach;
1110
import org.junit.jupiter.api.DisplayName;
@@ -31,8 +30,6 @@ public void init() {
3130
new LabQueryService(fakeLabRepository),new FileQueryService(fakeFileRepository)
3231
);
3332

34-
fakeFileRepository.save(FileEntity.builder().id(TEST_FILE_ID).build());
35-
3633
fakeLabRepository.save(
3734
Lab.create(
3835
"인공지능 연구실",

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import kgu.developers.domain.carousel.domain.Carousel;
77
import kgu.developers.domain.carousel.domain.CarouselRepository;
88
import kgu.developers.domain.file.application.query.FileQueryService;
9-
import kgu.developers.domain.file.domain.FileEntity;
9+
import kgu.developers.domain.file.domain.FileModel;
10+
import kgu.developers.domain.file.exception.FileIdRequiredException;
1011
import lombok.RequiredArgsConstructor;
1112

1213
@Service
@@ -16,7 +17,8 @@ public class CarouselCommandService {
1617
private final CarouselRepository carouselRepository;
1718

1819
public Long createCarousel(Long fileId, String text, String link) {
19-
FileEntity file = fileQueryService.getFileById(fileId);
20+
if (fileId == null) throw new FileIdRequiredException();
21+
FileModel file = fileQueryService.getFileById(fileId);
2022
Carousel carousel = Carousel.create(text, link, file.getId());
2123
return carouselRepository.save(carousel).getId();
2224
}
Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,35 @@
11
package kgu.developers.domain.carousel.domain;
22

3-
import static jakarta.persistence.GenerationType.IDENTITY;
4-
import static lombok.AccessLevel.PROTECTED;
5-
6-
import jakarta.persistence.Column;
7-
import jakarta.persistence.Entity;
8-
import jakarta.persistence.GeneratedValue;
9-
import jakarta.persistence.Id;
10-
import kgu.developers.common.domain.BaseTimeEntity;
3+
import java.time.LocalDateTime;
4+
115
import lombok.AllArgsConstructor;
12-
import lombok.Builder;
136
import lombok.Getter;
14-
import lombok.NoArgsConstructor;
157

16-
@Entity
178
@Getter
18-
@Builder
199
@AllArgsConstructor
20-
@NoArgsConstructor(access = PROTECTED)
21-
public class Carousel extends BaseTimeEntity {
22-
@Id
23-
@GeneratedValue(strategy = IDENTITY)
24-
private Long id;
25-
26-
@Column(nullable = false)
10+
public class Carousel {
11+
private final Long id;
2712
private String text;
28-
29-
@Column(nullable = false)
3013
private String link;
31-
32-
@Column(nullable = false)
3314
private Long fileId;
34-
35-
public static Carousel create(String text, String link, Long fileId) {
36-
return Carousel.builder()
37-
.text(text)
38-
.link(link)
39-
.fileId(fileId)
40-
.build();
15+
private LocalDateTime createdAt;
16+
private LocalDateTime updatedAt;
17+
private LocalDateTime deletedAt;
18+
19+
public static Carousel create(
20+
String text,
21+
String link,
22+
Long fileId
23+
) {
24+
return new Carousel(
25+
null,
26+
text,
27+
link,
28+
fileId,
29+
LocalDateTime.now(),
30+
LocalDateTime.now(),
31+
null
32+
);
4133
}
4234

4335
public void updateText(String text) {
@@ -53,3 +45,4 @@ public void updateFileId(Long fileId) {
5345
}
5446
}
5547

48+

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import kgu.developers.domain.carousel.domain.Carousel;
99
import kgu.developers.domain.carousel.domain.CarouselRepository;
10+
import kgu.developers.domain.carousel.infrastructure.entity.CarouselJpaEntity;
1011
import lombok.RequiredArgsConstructor;
1112

1213
@Repository
@@ -16,7 +17,9 @@ public class CarouselRepositoryImpl implements CarouselRepository {
1617

1718
@Override
1819
public Carousel save(Carousel carousel) {
19-
return jpaCarouselRepository.save(carousel);
20+
return jpaCarouselRepository.save(
21+
CarouselJpaEntity.toEntity(carousel)
22+
).toDomain();
2023
}
2124

2225
@Override
@@ -26,11 +29,15 @@ public void deleteById(Long id) {
2629

2730
@Override
2831
public List<Carousel> findAllByFileIsNotNullOrderByCreatedAtDesc() {
29-
return jpaCarouselRepository.findAllByFileIdIsNotNullOrderByCreatedAtDesc();
32+
return jpaCarouselRepository.findAllByFileIdIsNotNullOrderByCreatedAtDesc()
33+
.stream()
34+
.map(CarouselJpaEntity::toDomain)
35+
.toList();
3036
}
3137

3238
@Override
3339
public Optional<Carousel> findById(Long id) {
34-
return jpaCarouselRepository.findById(id);
40+
return jpaCarouselRepository.findById(id)
41+
.map(CarouselJpaEntity::toDomain);
3542
}
3643
}

0 commit comments

Comments
 (0)