Skip to content

Commit 90bc02e

Browse files
authored
Merge pull request #71 from Leets-Official/feat/#70/파일-도메인-분리
Feat #71 파일 도메인 분리 및 presigned url 도입
2 parents bbbf950 + 0ec471f commit 90bc02e

File tree

21 files changed

+336
-32
lines changed

21 files changed

+336
-32
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ dependencies {
5858
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
5959

6060
// AWS Spring Cloud
61-
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
61+
implementation 'software.amazon.awssdk:s3:2.19.1'
6262

6363
// ThymeLeaf
6464
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

src/main/java/leets/weeth/domain/account/application/usecase/ReceiptUseCaseImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import leets.weeth.domain.account.domain.service.ReceiptDeleteService;
1010
import leets.weeth.domain.account.domain.service.ReceiptGetService;
1111
import leets.weeth.domain.account.domain.service.ReceiptSaveService;
12-
import leets.weeth.domain.file.service.FileSaveService;
12+
import leets.weeth.domain.file.service.S3Service;
1313
import lombok.RequiredArgsConstructor;
1414
import org.springframework.stereotype.Service;
1515
import org.springframework.web.multipart.MultipartFile;
@@ -22,14 +22,14 @@ public class ReceiptUseCaseImpl implements ReceiptUseCase {
2222

2323
private final ReceiptDeleteService receiptDeleteService;
2424
private final ReceiptSaveService receiptSaveService;
25-
private final FileSaveService fileSaveService;
25+
private final S3Service s3Service;
2626
private final ReceiptMapper mapper;
2727
private final AccountGetService accountGetService;
2828
private final ReceiptGetService receiptGetService;
2929

3030
@Override @Transactional
3131
public void save(ReceiptDTO.Save dto, List<MultipartFile> files) {
32-
List<String> images = fileSaveService.uploadFiles(files);
32+
List<String> images = s3Service.uploadFiles(files);
3333
Account account = accountGetService.find(dto.cardinal());
3434
Receipt receipt = receiptSaveService.save(mapper.from(dto, images, account));
3535
account.spend(receipt);

src/main/java/leets/weeth/domain/board/application/usecase/NoticeUsecaseImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import leets.weeth.domain.board.domain.service.NoticeFindService;
88
import leets.weeth.domain.board.domain.service.NoticeSaveService;
99
import leets.weeth.domain.board.domain.service.NoticeUpdateService;
10-
import leets.weeth.domain.file.service.FileSaveService;
10+
import leets.weeth.domain.file.service.S3Service;
1111
import leets.weeth.domain.user.domain.entity.User;
1212
import leets.weeth.domain.user.domain.service.UserGetService;
1313
import leets.weeth.domain.board.application.exception.NoticeNotFoundException;
@@ -30,7 +30,7 @@ public class NoticeUsecaseImpl implements NoticeUsecase {
3030
private final NoticeDeleteService noticeDeleteService;
3131

3232
private final UserGetService userGetService;
33-
private final FileSaveService fileSaveService;
33+
private final S3Service s3Service;
3434

3535
private final NoticeMapper mapper;
3636

@@ -39,7 +39,7 @@ public void save(NoticeDTO.Save request, List<MultipartFile> files, Long userId)
3939
User user = userGetService.find(userId);
4040

4141
List<String> fileUrls;
42-
fileUrls = fileSaveService.uploadFiles(files);
42+
fileUrls = s3Service.uploadFiles(files);
4343
noticeSaveService.save(mapper.fromNoticeDto(request, fileUrls, user));
4444
}
4545

@@ -78,7 +78,7 @@ public void update(Long noticeId, NoticeDTO.Update dto, List<MultipartFile> file
7878
Notice notice = validateOwner(noticeId, userId);
7979

8080
List<String> fileUrls = notice.getFileUrls();
81-
List<String> uploadedFileUrls = fileSaveService.uploadFiles(files);
81+
List<String> uploadedFileUrls = s3Service.uploadFiles(files);
8282

8383
fileUrls.addAll(uploadedFileUrls);
8484

src/main/java/leets/weeth/domain/board/application/usecase/PostUseCaseImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import leets.weeth.domain.board.domain.service.PostFindService;
88
import leets.weeth.domain.board.domain.service.PostSaveService;
99
import leets.weeth.domain.board.domain.service.PostUpdateService;
10-
import leets.weeth.domain.file.service.FileSaveService;
10+
import leets.weeth.domain.file.service.S3Service;
1111
import leets.weeth.domain.user.domain.entity.User;
1212
import leets.weeth.domain.user.domain.service.UserGetService;
1313
import leets.weeth.domain.board.application.exception.PostNotFoundException;
@@ -30,7 +30,7 @@ public class PostUseCaseImpl implements PostUsecase {
3030
private final PostDeleteService postDeleteService;
3131

3232
private final UserGetService userGetService;
33-
private final FileSaveService fileSaveService;
33+
private final S3Service s3Service;
3434

3535
private final PostMapper mapper;
3636

@@ -39,7 +39,7 @@ public void save(PostDTO.Save request, List<MultipartFile> files, Long userId) {
3939
User user = userGetService.find(userId);
4040

4141
List<String> fileUrls;
42-
fileUrls = fileSaveService.uploadFiles(files);
42+
fileUrls = s3Service.uploadFiles(files);
4343
postSaveService.save(mapper.fromPostDto(request, fileUrls, user));
4444
}
4545

@@ -78,7 +78,7 @@ public void update(Long postId, PostDTO.Update dto, List<MultipartFile> files, L
7878
Post post = validateOwner(postId, userId);
7979

8080
List<String> fileUrls = post.getFileUrls();
81-
List<String> uploadedFileUrls = fileSaveService.uploadFiles(files);
81+
List<String> uploadedFileUrls = s3Service.uploadFiles(files);
8282

8383
fileUrls.addAll(uploadedFileUrls);
8484

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package leets.weeth.domain.file.application.dto.request;
2+
3+
public record FileSaveRequest(
4+
String fileName,
5+
String fileUrl
6+
) {
7+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package leets.weeth.domain.file.application.dto.request;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
5+
public record FileUpdateRequest(
6+
@NotBlank Long fileId,
7+
String fileName,
8+
String fileUrl
9+
) {
10+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package leets.weeth.domain.file.application.dto.response;
2+
3+
public record FileResponse(
4+
long fileId,
5+
String fileName,
6+
String fileUrl
7+
) {
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package leets.weeth.domain.file.application.dto.response;
2+
3+
public record UrlResponse(
4+
String fileName,
5+
String putUrl
6+
) {
7+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package leets.weeth.domain.file.application.mapper;
2+
3+
import leets.weeth.domain.board.domain.entity.Notice;
4+
import leets.weeth.domain.board.domain.entity.Post;
5+
import leets.weeth.domain.comment.application.mapper.CommentMapper;
6+
import leets.weeth.domain.file.application.dto.response.FileResponse;
7+
import leets.weeth.domain.file.application.dto.response.UrlResponse;
8+
import leets.weeth.domain.file.domain.entity.File;
9+
import org.mapstruct.Mapper;
10+
import org.mapstruct.Mapping;
11+
import org.mapstruct.MappingConstants;
12+
import org.mapstruct.ReportingPolicy;
13+
14+
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, uses = CommentMapper.class, unmappedTargetPolicy = ReportingPolicy.IGNORE)
15+
public interface FileMapper {
16+
17+
@Mapping(target = "post", source = "post")
18+
File toFile(String fileName, String fileUrl, Post post);
19+
20+
@Mapping(target = "notice", source = "notice")
21+
File toFile(String fileName, String fileUrl, Notice notice);
22+
23+
FileResponse toFileResponse(File file);
24+
25+
UrlResponse toUrlResponse(String fileName, String putUrl);
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package leets.weeth.domain.file.application.usecase;
2+
3+
import jakarta.transaction.Transactional;
4+
import leets.weeth.domain.file.application.dto.response.UrlResponse;
5+
import leets.weeth.domain.file.domain.service.PreSignedService;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
9+
import java.util.List;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
public class FileManageUseCase {
14+
15+
private final PreSignedService preSignedService;
16+
17+
public List<UrlResponse> getUrl(List<String> fileNames) {
18+
return fileNames.stream()
19+
.map(preSignedService::generateUrl)
20+
.toList();
21+
}
22+
}

0 commit comments

Comments
 (0)