Skip to content

Commit

Permalink
Merge pull request #226 from Kernel360/refactor/file
Browse files Browse the repository at this point in the history
Refactor: 파일 반환 dto optional로 변경
  • Loading branch information
kdh10806 authored Feb 11, 2025
2 parents ca0b025 + 587c9af commit b8cd7d6
Show file tree
Hide file tree
Showing 19 changed files with 121 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.seveneleven.company.service.CompanyFileService;
import com.seveneleven.response.APIResponse;
import com.seveneleven.response.SuccessCode;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.security.dto.CustomUserDetails;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -43,7 +43,8 @@ public ResponseEntity<APIResponse> uploadFile(@PathVariable("companyId") Long co
*/
@GetMapping(value = "/{companyId}/logo-image")
public ResponseEntity<APIResponse> getCompanyLogo(@PathVariable("companyId") Long companyId) {
FileMetadataDto logoImage = companyFileService.getLogoImage(companyId);

FileMetadataResponse logoImage = companyFileService.getLogoImage(companyId);

return ResponseEntity
.status(SuccessCode.OK.getStatus())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.seveneleven.exception.BusinessException;
import com.seveneleven.response.ErrorCode;
import com.seveneleven.util.file.handler.FileHandler;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.file.repository.FileMetadataRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -55,16 +55,16 @@ public void uploadLogoImage(MultipartFile file, Long companyId, Long uploaderId)
* @return fileMetadataDto S3에 저장된 파일의 메타데이터 DTO
*/
@Transactional(readOnly = true)
public FileMetadataDto getLogoImage(Long companyId) {
public FileMetadataResponse getLogoImage(Long companyId) {
//회사 유효성 검사
Company companyEntity = companyRepository.findById(companyId)
.orElseThrow(() -> new BusinessException(ErrorCode.COMPANY_IS_NOT_FOUND));

//카테고리와 참조 id 로 FileMetadata 탐색
FileMetadata fileEntity = fileHandler.getFile(FileCategory.COMPANY_LOGO_IMAGE, companyEntity.getId());

//dto 변환 반환
return FileMetadataDto.toDto(fileEntity);
//dto 변환 반환
return FileMetadataResponse.toDto(fileEntity).orElse(null);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions Common/src/main/java/com/seveneleven/entity/file/Link.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "link")
public class Link {
private static final int MAX_LINK_LENGTH = 1000;
private static final int MAX_LINK_TITLE_LENGTH = 100;
private static final int MAX_LINK_TITLE_LENGTH = 400;
private static final int MAX_LINK_LENGTH = 4000;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ public class LinkHistory {
private static final int MAX_REFERENCE_IDENTIFIER_LENGTH = 300;
private static final int MAX_WRITER_NAME_LENGTH = 200;
private static final int MAX_WRITER_AUTHORITY_LENGTH = 50;
private static final int MAX_LINK_TITLE_LENGTH = 100;
private static final int MAX_LINK_LENGTH = 1000;
private static final int MAX_LINK_TITLE_LENGTH = 400;
private static final int MAX_LINK_LENGTH = 4000;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public ResponseEntity<APIResponse<?>> handleException(Exception e, WebRequest re
String detailedMessage = e.getMessage() != null ? e.getMessage() : "An unexpected error occurred";
APIResponse<?> response = APIResponse.fail(errorCode, detailedMessage);

e.printStackTrace();
return ResponseEntity
.status(errorCode.getStatusCode()) // HTTP 상태 코드 설정
.body(response); // APIResponse를 응답 본문으로 설정
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.seveneleven.util.file.dto;

import com.seveneleven.entity.file.FileMetadata;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Optional;

@Getter
@NoArgsConstructor
public class FileMetadataResponse {
private Long id; //통합 파일 id
private String category; //파일 카테고리
private Long referenceId; //참조 ID
private String displayTitle; //유저에게 보여질 파일 이름
private String title; //저장된 파일 이름(UUID)
private String contentType; //MIME 타입
private String format; //파일 확장자(포맷)
private Double size; //파일 사이즈
private String path; //파일 경로
private Long createdBy; //등록자 ID
private LocalDateTime createdAt; //등록일시

//Entity -> DTO
public static Optional<FileMetadataResponse> toDto(FileMetadata metadata) {
return Optional.ofNullable(metadata)
.map(m -> {
FileMetadataResponse dto = new FileMetadataResponse();
dto.id = m.getId();
dto.category = m.getCategory().name();
dto.referenceId = m.getReferenceId();
dto.displayTitle = m.getDisplayTitle();
dto.title = m.getTitle();
dto.contentType = m.getContentType();
dto.format = m.getFileFormat();
dto.size = m.getFileSize();
dto.path = m.getFilePath();
dto.createdBy = m.getCreatedBy();
dto.createdAt = m.getCreatedAt();
return dto;
});
}
}
18 changes: 3 additions & 15 deletions Common/src/main/java/com/seveneleven/util/file/dto/LinkInput.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,7 @@
@Getter
@NoArgsConstructor
public class LinkInput {
private String linkTitle; //링크명
@Size(max = 1000, message = "링크는 최대 1000자까지 입력 가능합니다.")
private String link; //링크

public static LinkInput toLinkPayload(String linkTitle, String link) {
if(link == null){
return null;
}

LinkInput dto = new LinkInput();
dto.linkTitle = linkTitle;
dto.link = link;

return dto;
}
private String linkTitle; //링크명(nullable)
@Size(min = 1, max = 1000, message = "링크는 1자 이상 1000자까지 입력 가능합니다.")
private String link; //링크
}
6 changes: 5 additions & 1 deletion Common/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@ spring.jackson.deserialization.fail-on-unknown-properties=true

# Redis Setting
spring.data.redis.host=${SPRING_REDIS_HOST}
spring.data.redis.port=${SPRING_REDIS_PORT}
spring.data.redis.port=${SPRING_REDIS_PORT}

# Multipart Setting
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=500MB
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.seveneleven.board.controller;

import com.seveneleven.board.dto.*;
import com.seveneleven.board.service.CommentService;
import com.seveneleven.board.service.PostFileService;
import com.seveneleven.board.service.PostLinkService;
import com.seveneleven.board.service.PostService;
Expand All @@ -10,7 +9,7 @@
import com.seveneleven.response.APIResponse;
import com.seveneleven.response.PaginatedResponse;
import com.seveneleven.response.SuccessCode;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.file.dto.LinkInput;
import com.seveneleven.util.file.dto.LinkResponse;
import com.seveneleven.util.security.dto.CustomUserDetails;
Expand Down Expand Up @@ -80,11 +79,11 @@ public ResponseEntity<APIResponse<List<LinkResponse>>> selectPostLinks(@PathVari
* 게시글의 파일 목록을 불러오는 메서드
*/
@GetMapping("/{postId}/files")
public ResponseEntity<APIResponse<List<FileMetadataDto>>> selectPostFiles(@PathVariable Long postId) {
List<FileMetadataDto> fileDataDtos = postFileService.getPostFiles(postId);
public ResponseEntity<APIResponse<List<FileMetadataResponse>>> selectPostFiles(@PathVariable Long postId) {
List<FileMetadataResponse> fileDataResponses = postFileService.getPostFiles(postId);

return ResponseEntity.status(SuccessCode.OK.getStatus())
.body(APIResponse.success(SuccessCode.OK, fileDataDtos));
.body(APIResponse.success(SuccessCode.OK, fileDataResponses));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import com.seveneleven.entity.file.constant.FileCategory;
import com.seveneleven.exception.BusinessException;
import com.seveneleven.response.ErrorCode;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.file.handler.FileHandler;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.repository.FileMetadataHistoryRepository;
import com.seveneleven.util.file.repository.FileMetadataRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -17,6 +17,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
Expand Down Expand Up @@ -69,7 +70,7 @@ public void uploadPostFiles(List<MultipartFile> files, Long postId, Long uploade
* @return List<fileMetadataDto> 해당 게시물의 파일 리스트
*/
@Transactional(readOnly = true)
public List<FileMetadataDto> getPostFiles(Long postId){
public List<FileMetadataResponse> getPostFiles(Long postId){
//게시물 유효성 검사
Post postEntity = postRepository.findById(postId)
.orElseThrow(() -> new BusinessException(ErrorCode.NOT_FOUND_POST));
Expand All @@ -78,15 +79,13 @@ public List<FileMetadataDto> getPostFiles(Long postId){
//페이지네이션 없음
List<FileMetadata> fileEntities = fileHandler.getFiles(FileCategory.POST_ATTACHMENT, postEntity.getId());

//entity를 dto에 담는다.
List<FileMetadataDto> fileMetadataDtos = new ArrayList<>();
for (FileMetadata fileMetadata : fileEntities) {
FileMetadataDto dto = FileMetadataDto.toDto(fileMetadata);
fileMetadataDtos.add(dto);
}

//반환
return fileMetadataDtos;
// 파일이 없으면 빈 리스트 반환, 있으면 DTO로 변환하여 반환
return Optional.ofNullable(fileEntities)
.orElse(List.of()) // fileEntities가 null이면 빈 리스트 반환
.stream()
.map(FileMetadataResponse::toDto) // Entity -> Optional<DTO> 변환
.flatMap(Optional::stream) // Optional을 풀어서 DTO만 리스트에 포함
.collect(Collectors.toList());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.seveneleven.member.service.MyPageService;
import com.seveneleven.response.APIResponse;
import com.seveneleven.response.SuccessCode;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.security.dto.CustomUserDetails;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -106,9 +106,9 @@ public ResponseEntity<APIResponse<SuccessCode>> uploadProfileImage(@PathVariable
* @return ResponseEntity<APIResponse<SuccessCode>> 성공 응답 객체
*/
@GetMapping(value = "/{memberId}/profile-image")
public ResponseEntity<APIResponse<FileMetadataDto>> getProfileImage(@PathVariable("memberId") Long memberId) {
public ResponseEntity<APIResponse<FileMetadataResponse>> getProfileImage(@PathVariable("memberId") Long memberId) {
//memberId로 프로필 이미지 조회
FileMetadataDto profileImage = memberFileService.getProfileImage(memberId);
FileMetadataResponse profileImage = memberFileService.getProfileImage(memberId);

//반환
return ResponseEntity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.seveneleven.member.repository.MemberRepository;
import com.seveneleven.response.ErrorCode;
import com.seveneleven.util.file.handler.FileHandler;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import com.seveneleven.util.file.repository.FileMetadataRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -57,15 +57,15 @@ public void uploadProfileImage(MultipartFile file, Long memberId, Long uploaderI
* @return fileMetadataDto S3에 저장된 파일의 메타데이터 DTO
*/
@Transactional(readOnly = true)
public FileMetadataDto getProfileImage(Long memberId) {
public FileMetadataResponse getProfileImage(Long memberId) {
//1. memberId로 존재 여부 판별
Member memberEntity = memberRepository.findById(memberId)
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));

//카테고리와 참조id로 filemetadata 검색
FileMetadata fileEntity = fileHandler.getFile(FileCategory.USER_PROFILE_IMAGE, memberEntity.getId());

return FileMetadataDto.toDto(fileEntity);
return FileMetadataResponse.toDto(fileEntity).orElse(null);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.seveneleven.member.service;

import com.seveneleven.entity.file.FileMetadata;
import com.seveneleven.entity.member.Company;
import com.seveneleven.entity.member.Member;
import com.seveneleven.entity.member.MemberProfileHistory;
Expand All @@ -11,15 +10,15 @@
import com.seveneleven.member.dto.PatchMember;
import com.seveneleven.member.repository.CompanyRepository;
import com.seveneleven.member.repository.MemberRepository;
import com.seveneleven.member.repository.PasswordHistoryRepository;
import com.seveneleven.member.repository.ProfileHistoryRepository;
import com.seveneleven.response.ErrorCode;
import com.seveneleven.util.file.dto.FileMetadataDto;
import com.seveneleven.util.file.dto.FileMetadataResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Objects;
import java.util.Optional;

@Service
@RequiredArgsConstructor
Expand All @@ -46,11 +45,9 @@ public MyPageGetMember getMember(String loginId) {
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));

// 회원 프로필 링크 조회
FileMetadataDto imageMetadatadto = memberFileService.getProfileImage(member.getId());
String imageUrl = null;
if(imageMetadatadto != null) {
imageUrl = memberFileService.getProfileImage(member.getId()).getPath();
}
String imageUrl = Optional.ofNullable(memberFileService.getProfileImage(member.getId()))
.map(FileMetadataResponse::getPath)
.orElse(null);

// 응답 DTO 생성 및 회사 정보 설정
MyPageGetMember response = MyPageGetMember.fromEntity(member);
Expand Down
Loading

0 comments on commit b8cd7d6

Please sign in to comment.