Feat: ImageMetaData 요청 및 API 생성

This commit is contained in:
김용수 2024-10-02 11:48:07 +09:00
parent 995cd0387f
commit 3386a28758
4 changed files with 61 additions and 3 deletions

View File

@ -51,6 +51,20 @@ public class ImageController {
imageService.uploadFolderWithImages(folderZip, projectId, folderId, memberId); imageService.uploadFolderWithImages(folderZip, projectId, folderId, memberId);
} }
@PostMapping("/folders/{folder_id}/images/presigned")
@SwaggerApiSuccess(description = "압축폴더를 성공적으로 업로드합니다.")
@Operation(summary = "압축 폴더 업로드", description = "압축 폴더 내 폴더와 이미지 파일을 업로드합니다.")
@SwaggerApiError({ErrorCode.BAD_REQUEST, ErrorCode.NOT_AUTHOR, ErrorCode.SERVER_ERROR})
public List<ImagePresignedUrlResponse> uploadFolderByPresignedImage(
@CurrentUser final Integer memberId,
@RequestBody final List<ImageMetaRequest> imageMetaList,
@PathVariable("project_id") final Integer projectId,
@PathVariable("folder_id") final Integer folderId) {
log.debug("requestImageList {}", imageMetaList);
// TODO: 변경
return imageMetaList.stream().map(o -> ImagePresignedUrlResponse.of(o.getId(), o.getFileName())).toList();
}
@GetMapping("/folders/{folder_id}/images/{image_id}") @GetMapping("/folders/{folder_id}/images/{image_id}")
@SwaggerApiSuccess(description = "이미지를 단일 조회합니다.") @SwaggerApiSuccess(description = "이미지를 단일 조회합니다.")
@Operation(summary = "이미지 단일 조회", description = "이미지 정보를 단일 조회합니다.") @Operation(summary = "이미지 단일 조회", description = "이미지 정보를 단일 조회합니다.")

View File

@ -0,0 +1,22 @@
package com.worlabel.domain.image.entity.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Schema(name = "이미지 PreSigned DTO", description = "PreSigned Url을 얻기 위한 DTO")
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ImageMetaRequest {
@Schema(description = "이미지 Order", example = "각 이미지에 대한 Order값")
private Integer id;
@Schema(description = "파일 이름", example = "해당 파일의 이름")
private String fileName;
}

View File

@ -0,0 +1,22 @@
package com.worlabel.domain.image.entity.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@Schema(name = "이미지 PreSigned DTO", description = "PreSigned Url을 얻기 위한 DTO")
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ImagePresignedUrlResponse {
@Schema(description = "이미지 Order", example = "각 이미지에 대한 Order값")
private Integer id;
@Schema(description = "이미지에 대한 presignedUrl", example = "presignedUrl")
private String presignedUrl;
public static ImagePresignedUrlResponse of(final Integer id,final String presignedUrl) {
return new ImagePresignedUrlResponse(id, presignedUrl);
}
}

View File

@ -68,11 +68,11 @@ public class ImageService {
int batchSize; int batchSize;
if (totalImages <= 100) { if (totalImages <= 100) {
batchSize = 25; // 작은 이미지 수는 작은 배치 크기 batchSize = 10; // 작은 이미지 수는 작은 배치 크기
} else if (totalImages <= 3000) { } else if (totalImages <= 3000) {
batchSize = 50; // 중간 이미지 수는 중간 배치 크기 batchSize = 25; // 중간 이미지 수는 중간 배치 크기
} else { } else {
batchSize = 100; // 이미지 수는 배치 크기 batchSize = 50; // 이미지 수는 배치 크기
} }
List<CompletableFuture<Void>> futures = new ArrayList<>(); List<CompletableFuture<Void>> futures = new ArrayList<>();