From ecc57308aa18b03d90cf5c044380d5f02f59808c Mon Sep 17 00:00:00 2001 From: corpi Date: Tue, 23 Dec 2025 00:18:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20file=5Fstore=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/book/domain/entity/BookVersion.java | 6 ++-- .../core/storage/domain/entity/FileStore.java | 31 +++++++++++++++++++ .../repository/FileStoreRepository.java | 9 ++++++ .../domain/service/FileStoreService.java | 30 ++++++++++++++++++ .../resources/db/changelog/changelog.yaml | 4 ++- .../sql/book/251222/1_update_book_version.sql | 8 +++++ 6 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/audio/core/storage/domain/entity/FileStore.java create mode 100644 src/main/java/com/audio/core/storage/domain/repository/FileStoreRepository.java create mode 100644 src/main/java/com/audio/core/storage/domain/service/FileStoreService.java create mode 100644 src/main/resources/db/sql/book/251222/1_update_book_version.sql diff --git a/src/main/java/com/audio/core/book/domain/entity/BookVersion.java b/src/main/java/com/audio/core/book/domain/entity/BookVersion.java index a653d7a..d029cea 100644 --- a/src/main/java/com/audio/core/book/domain/entity/BookVersion.java +++ b/src/main/java/com/audio/core/book/domain/entity/BookVersion.java @@ -40,11 +40,9 @@ public class BookVersion extends BaseEntity { @Enumerated(EnumType.STRING) private LengthPreset lengthPreset; - @Column(name = "book_s3_key") - private String bookS3Key; + private Long bookFileId; - @Column(name = "audio_s3_key") - private String audioS3Key; + private Long audioFileId; private String language = "en-Us"; diff --git a/src/main/java/com/audio/core/storage/domain/entity/FileStore.java b/src/main/java/com/audio/core/storage/domain/entity/FileStore.java new file mode 100644 index 0000000..d7edffc --- /dev/null +++ b/src/main/java/com/audio/core/storage/domain/entity/FileStore.java @@ -0,0 +1,31 @@ +package com.audio.core.storage.domain.entity; + +import com.audio.common.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Entity +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class FileStore extends BaseEntity { + + @Id + @GeneratedValue + private Long id; + + private String objectKey; + + private String originalFileName; + + private String contentType; + + private Long sizeBytes; +} diff --git a/src/main/java/com/audio/core/storage/domain/repository/FileStoreRepository.java b/src/main/java/com/audio/core/storage/domain/repository/FileStoreRepository.java new file mode 100644 index 0000000..6270014 --- /dev/null +++ b/src/main/java/com/audio/core/storage/domain/repository/FileStoreRepository.java @@ -0,0 +1,9 @@ +package com.audio.core.storage.domain.repository; + +import com.audio.core.storage.domain.entity.FileStore; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FileStoreRepository extends JpaRepository { +} diff --git a/src/main/java/com/audio/core/storage/domain/service/FileStoreService.java b/src/main/java/com/audio/core/storage/domain/service/FileStoreService.java new file mode 100644 index 0000000..ff415c0 --- /dev/null +++ b/src/main/java/com/audio/core/storage/domain/service/FileStoreService.java @@ -0,0 +1,30 @@ +package com.audio.core.storage.domain.service; + +import com.audio.core.storage.domain.entity.FileStore; +import com.audio.core.storage.domain.repository.FileStoreRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class FileStoreService { + + private final FileStoreRepository fileStoreRepository; + + public record SaveFileStoreRequest(String objectKey, String fileName, String contentType, Long sizeBytes) {} + + @Transactional + public void save(SaveFileStoreRequest request) { + FileStore fileStore = FileStore.builder() + .objectKey(request.objectKey()) + .originalFileName(request.fileName) + .contentType(request.contentType) + .sizeBytes(request.sizeBytes) + .build(); + + fileStoreRepository.save(fileStore); + } +} diff --git a/src/main/resources/db/changelog/changelog.yaml b/src/main/resources/db/changelog/changelog.yaml index c230937..b0e8d95 100644 --- a/src/main/resources/db/changelog/changelog.yaml +++ b/src/main/resources/db/changelog/changelog.yaml @@ -4,4 +4,6 @@ databaseChangeLog: - includeAll: path: db/sql/book/251215 - includeAll: - path: db/sql/filestore/251221 \ No newline at end of file + path: db/sql/filestore/251221 + - includeAll: + path: db/sql/book/251222 diff --git a/src/main/resources/db/sql/book/251222/1_update_book_version.sql b/src/main/resources/db/sql/book/251222/1_update_book_version.sql new file mode 100644 index 0000000..f6123f0 --- /dev/null +++ b/src/main/resources/db/sql/book/251222/1_update_book_version.sql @@ -0,0 +1,8 @@ +-- liquibase formatted sql +-- changeset ijeongmin:1_update_book_version.sql +alter table book_version + change column book_s3_key book_file_id bigint null, + change column audio_s3_key audio_file_id bigint null, + + add index idx_book_version_book_file_id (book_file_id), + add index idx_book_version_audio_file_id (audio_file_id); \ No newline at end of file