-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: ✨ 사용자 프로필 이미지 등록 요청 API 구현 (#105)
* feat: 사용자 프로필 이미지 등록 요청 dto 정의 * feat: 사용자 프로필 이미지 등록 요청 api 설계 * feat: user entity에 profile-image-url 수정 로직 추가 * feat: 사용자 프로필 이미지 등록을 위한 usecase 정의 * feat: s3 파일 존재 여부 반환 로직 구현 * feat: storage 저장 실패 시 에러코드 정의 * feat: s3 파일 복사 로직 구현 * feat: 사용자 프로필 이미지 저장 api 구현 * feat: 사용자 프로필 이미지 원본 저장 시 storage-class 적용 * fix: 이미지 리사이징을 위한 storage-class 수정 * docs: 프로필 이미지 등록 swagger 응답 케이스 추가 * test: 사용자 프로필 이미지 등록 api 테스트 코드 작성 * test: user-account-usecase에 aws-s3-provider mockbean 적용 * fix: 프로필 이미지 등록 메서드 put으로 변경 * docs: 프로필 이미지 등록 성공 시 예시 응답 제거 * docs: 프로필 이미지 등록 swagger parameter 제거 * fix: request dto validate 어노테이션 추가 및 tab-character 제거 * rename: s3 파일 존재 여부 메서드명 수정 * fix: 프로필 이미지 dto에 regex 패턴 검증 로직 추가 * test: 테스트 케이스 이미지 경로 수정 * fix: 프로필 이미지 등록 요청 dto 정적 팩토리 메서드 삭제 * refactor: 사용자 프로필 이미지 경로 prefix 환경변수 처리 * refactor: s3 object-key regex 상수로 분리 * feat: s3 object-key regex 클래스 분리 및 정적 변수로 선언
- Loading branch information
1 parent
00ac66b
commit 35710d0
Showing
16 changed files
with
954 additions
and
648 deletions.
There are no files selected for viewing
60 changes: 30 additions & 30 deletions
60
...y-app-external-api/src/main/java/kr/co/pennyway/api/apis/storage/dto/PresignedUrlDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,38 @@ | ||
package kr.co.pennyway.api.apis.storage.dto; | ||
|
||
import java.net.URI; | ||
|
||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import jakarta.validation.constraints.NotBlank; | ||
|
||
import java.net.URI; | ||
|
||
public class PresignedUrlDto { | ||
@Schema(title = "S3 이미지 저장을 위한 Presigned URL 발급 요청 DTO", description = "S3에 이미지를 저장하기 위한 Presigned URL을 발급 요청을 위한 DTO") | ||
public record Req( | ||
@Schema(description = "이미지 종류", example = "PROFILE/FEED/CHATROOM_PROFILE/CHAT/CHAT_PROFILE") | ||
@NotBlank(message = "이미지 종류는 필수입니다.") | ||
String type, | ||
@Schema(description = "파일 확장자", example = "jpg/png/jpeg") | ||
@NotBlank(message = "파일 확장자는 필수입니다.") | ||
String ext, | ||
@Schema(description = "사용자 ID", example = "1") | ||
String userId, | ||
@Schema(description = "채팅방 ID", example = "12345678-1234-5678-1234-567812345678") | ||
String chatroomId | ||
) { | ||
} | ||
@Schema(title = "S3 이미지 저장을 위한 Presigned URL 발급 요청 DTO", description = "S3에 이미지를 저장하기 위한 Presigned URL을 발급 요청을 위한 DTO") | ||
public record Req( | ||
@Schema(description = "이미지 종류", example = "PROFILE/FEED/CHATROOM_PROFILE/CHAT/CHAT_PROFILE") | ||
@NotBlank(message = "이미지 종류는 필수입니다.") | ||
String type, | ||
@Schema(description = "파일 확장자", example = "jpg/png/jpeg") | ||
@NotBlank(message = "파일 확장자는 필수입니다.") | ||
String ext, | ||
@Schema(description = "사용자 ID", example = "1") | ||
String userId, | ||
@Schema(description = "채팅방 ID", example = "12345678-1234-5678-1234-567812345678") | ||
String chatroomId | ||
) { | ||
} | ||
|
||
@Schema(title = "S3 이미지 저장을 위한 Presigned URL 발급 응답 DTO") | ||
public record Res( | ||
@Schema(description = "Presigned URL") | ||
URI presignedUrl | ||
) { | ||
/** | ||
* Presigned URL 발급 응답 객체 생성 | ||
* | ||
* @param presignedUrl String : Presigned URL | ||
*/ | ||
public static Res of(URI presignedUrl) { | ||
return new Res(presignedUrl); | ||
} | ||
} | ||
@Schema(title = "S3 이미지 저장을 위한 Presigned URL 발급 응답 DTO") | ||
public record Res( | ||
@Schema(description = "Presigned URL") | ||
URI presignedUrl | ||
) { | ||
/** | ||
* Presigned URL 발급 응답 객체 생성 | ||
* | ||
* @param presignedUrl String : Presigned URL | ||
*/ | ||
public static Res of(URI presignedUrl) { | ||
return new Res(presignedUrl); | ||
} | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
...pp-external-api/src/main/java/kr/co/pennyway/api/apis/storage/service/StorageService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package kr.co.pennyway.api.apis.storage.service; | ||
|
||
import kr.co.pennyway.infra.client.aws.s3.AwsS3Provider; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.net.URI; | ||
|
||
@Slf4j | ||
@Service | ||
@RequiredArgsConstructor | ||
public class StorageService { | ||
private final AwsS3Provider awsS3Provider; | ||
|
||
public URI getPresignedUrl(String type, String ext, String userId, String chatroomId) { | ||
return awsS3Provider.generatedPresignedUrl(type, ext, userId, chatroomId); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.