11package com .depromeet .domain .image .application ;
22
3- import com .amazonaws .HttpMethod ;
4- import com .amazonaws .services .s3 .AmazonS3 ;
5- import com .amazonaws .services .s3 .Headers ;
6- import com .amazonaws .services .s3 .model .CannedAccessControlList ;
7- import com .amazonaws .services .s3 .model .GeneratePresignedUrlRequest ;
83import com .depromeet .domain .image .dao .ImageRepository ;
94import com .depromeet .domain .image .domain .Image ;
105import com .depromeet .domain .image .domain .ImageFileExtension ;
2318import com .depromeet .global .common .constants .UrlConstants ;
2419import com .depromeet .global .error .exception .CustomException ;
2520import com .depromeet .global .error .exception .ErrorCode ;
21+ import com .depromeet .global .util .ImageUtil ;
2622import com .depromeet .global .util .MemberUtil ;
2723import com .depromeet .global .util .SpringEnvironmentUtil ;
28- import com .depromeet .infra .config .s3 .S3Properties ;
29- import java .util .Date ;
3024import java .util .UUID ;
3125import lombok .RequiredArgsConstructor ;
3226import org .springframework .stereotype .Service ;
3832public class ImageService {
3933 private final MemberUtil memberUtil ;
4034 private final SpringEnvironmentUtil springEnvironmentUtil ;
41- private final S3Properties s3Properties ;
42- private final AmazonS3 amazonS3 ;
35+ private final ImageUtil imageUtil ;
4336 private final MissionRecordRepository missionRecordRepository ;
4437 private final MissionRecordTtlRepository missionRecordTtlRepository ;
4538 private final ImageRepository imageRepository ;
@@ -60,13 +53,8 @@ public PresignedUrlResponse createMissionRecordPresignedUrl(
6053 request .missionRecordId (),
6154 imageKey ,
6255 request .imageFileExtension ());
63- GeneratePresignedUrlRequest generatePresignedUrlRequest =
64- createGeneratePreSignedUrlRequest (
65- s3Properties .bucket (),
66- fileName ,
67- request .imageFileExtension ().getUploadExtension ());
6856
69- String presignedUrl = amazonS3 . generatePresignedUrl ( generatePresignedUrlRequest ). toString ( );
57+ String presignedUrl = imageUtil . createPreSignedUrl ( fileName , request . imageFileExtension () );
7058
7159 missionRecord .updateUploadStatusPending ();
7260 missionRecordTtlRepository .deleteById (request .missionRecordId ());
@@ -111,13 +99,9 @@ public PresignedUrlResponse createMemberProfilePresignedUrl(
11199 currentMember .getId (),
112100 imageKey ,
113101 request .imageFileExtension ());
114- GeneratePresignedUrlRequest generatePresignedUrlRequest =
115- createGeneratePreSignedUrlRequest (
116- s3Properties .bucket (),
117- fileName ,
118- request .imageFileExtension ().getUploadExtension ());
119102
120- String presignedUrl = amazonS3 .generatePresignedUrl (generatePresignedUrlRequest ).toString ();
103+ String presignedUrl = imageUtil .createPreSignedUrl (fileName , request .imageFileExtension ());
104+
121105 imageRepository .save (
122106 Image .createImage (
123107 ImageType .MEMBER_PROFILE ,
@@ -200,26 +184,6 @@ private String createFileName(
200184 + imageFileExtension .getUploadExtension ();
201185 }
202186
203- private String createUploadImageUrl (
204- ImageType imageType ,
205- Long targetId ,
206- String imageKey ,
207- ImageFileExtension imageFileExtension ) {
208- return s3Properties .endpoint ()
209- + "/"
210- + s3Properties .bucket ()
211- + "/"
212- + springEnvironmentUtil .getCurrentProfile ()
213- + "/"
214- + imageType .getValue ()
215- + "/"
216- + targetId
217- + "/"
218- + imageKey
219- + "."
220- + imageFileExtension .getUploadExtension ();
221- }
222-
223187 private String createReadImageUrl (
224188 ImageType imageType ,
225189 Long targetId ,
@@ -238,28 +202,6 @@ private String createReadImageUrl(
238202 + imageFileExtension .getUploadExtension ();
239203 }
240204
241- private GeneratePresignedUrlRequest createGeneratePreSignedUrlRequest (
242- String bucket , String fileName , String fileExtension ) {
243- GeneratePresignedUrlRequest generatePresignedUrlRequest =
244- new GeneratePresignedUrlRequest (bucket , fileName , HttpMethod .PUT )
245- .withKey (fileName )
246- .withContentType ("image/" + fileExtension )
247- .withExpiration (getPreSignedUrlExpiration ());
248-
249- generatePresignedUrlRequest .addRequestParameter (
250- Headers .S3_CANNED_ACL , CannedAccessControlList .PublicRead .toString ());
251-
252- return generatePresignedUrlRequest ;
253- }
254-
255- private Date getPreSignedUrlExpiration () {
256- Date expiration = new Date ();
257- var expTimeMillis = expiration .getTime ();
258- expTimeMillis += 1000 * 60 * 30 ;
259- expiration .setTime (expTimeMillis );
260- return expiration ;
261- }
262-
263205 private void validateMissionRecordUserMismatch (Mission mission , Member member ) {
264206 if (!mission .getMember ().getId ().equals (member .getId ())) {
265207 throw new CustomException (ErrorCode .MISSION_RECORD_USER_MISMATCH );
0 commit comments