diff --git a/.gitmodules b/.gitmodules
index aa8c6b31b..3c09b9341 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,11 +2,3 @@
path = backend/src/main/resources/config
url = git@github.com:zzimkkong/config.git
branch = main
-[submodule "s3proxy/src/main/resources/s3proxy-config"]
- path = s3proxy/src/main/resources/s3proxy-config
- url = git@github.com:zzimkkong/s3proxy-config.git
- branch = main
-[submodule "s3proxy/src/main/resources/config"]
- path = s3proxy/src/main/resources/config
- url = git@github.com:zzimkkong/config.git
- branch = main
diff --git a/backend/build.gradle b/backend/build.gradle
index 19d3cd838..304f0ea30 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -46,12 +46,6 @@ dependencies {
// Jwt
implementation 'io.jsonwebtoken:jjwt:0.9.1'
- // SvgToPng
- implementation 'org.apache.xmlgraphics:batik-all:1.12'
- implementation 'org.apache.xmlgraphics:xmlgraphics-commons:2.4'
- implementation 'xml-apis:xml-apis:1.4.01'
- implementation 'xml-apis:xml-apis-ext:1.3.04'
-
// Cryptor
implementation 'commons-codec:commons-codec:1.15'
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/DataLoader.java b/backend/src/main/java/com/woowacourse/zzimkkong/DataLoader.java
index da635b8b3..9276ee639 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/DataLoader.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/DataLoader.java
@@ -48,7 +48,7 @@ public void run(String... args) {
new Map(
"루터회관",
"{'id': '1', 'type': 'polyline', 'fill': '', 'stroke': 'rgba(111, 111, 111, 1)', 'points': '['60,250', '1,231', '242,252']', 'd': '[]', 'transform': ''}",
- "https://d1dgzmdd5f1fx6.cloudfront.net/thumbnails-local/1.png",
+ "",
pobi)
);
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/config/S3ProxyConfig.java b/backend/src/main/java/com/woowacourse/zzimkkong/config/S3ProxyConfig.java
deleted file mode 100644
index 68825ba00..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/config/S3ProxyConfig.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.woowacourse.zzimkkong.config;
-
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.S3ProxyUploader;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.StorageUploader;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.web.reactive.function.client.WebClient;
-
-@Configuration
-@PropertySource("classpath:config/s3proxy.properties")
-public class S3ProxyConfig {
- private final WebClient webClient;
-
- public S3ProxyConfig(final WebClient webClient) {
- this.webClient = webClient;
- }
-
- @Bean(name = "storageUploader")
- @Profile("prod")
- public StorageUploader storageUploaderProd(
- @Value("${s3proxy.server-uri.prod}") final String serverUri,
- @Value("${s3proxy.secret-key.prod}") final String secretKey) {
- return new S3ProxyUploader(serverUri, secretKey, webClient);
- }
-
- @Bean(name = "storageUploader")
- @Profile({"dev", "local", "test"})
- public StorageUploader storageUploaderDev(
- @Value("${s3proxy.server-uri.dev}") final String serverUri,
- @Value("${s3proxy.secret-key.dev}") final String secretKey) {
- return new S3ProxyUploader(serverUri, secretKey, webClient);
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmUpScheduler.java b/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmUpScheduler.java
deleted file mode 100644
index 120976f30..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmUpScheduler.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.woowacourse.zzimkkong.config.warmup;
-
-import com.woowacourse.zzimkkong.infrastructure.warmup.Warmer;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-
-import javax.annotation.PostConstruct;
-
-@EnableScheduling
-@Configuration
-@Profile("!test")
-public class WarmUpScheduler {
- private Warmer warmer;
-
- public WarmUpScheduler(final Warmer warmer) {
- this.warmer = warmer;
- }
-
- @Scheduled(fixedDelay = 60 * 60 * 1000)
- public void warmUp() {
- warmer.warmUp();
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmerConfig.java b/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmerConfig.java
deleted file mode 100644
index 2cf14e110..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/config/warmup/WarmerConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.woowacourse.zzimkkong.config.warmup;
-
-import com.woowacourse.zzimkkong.domain.SlackUrl;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.BatikConverter;
-import com.woowacourse.zzimkkong.infrastructure.warmup.Warmer;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.web.reactive.function.client.WebClient;
-
-@Configuration
-@PropertySource("classpath:config/s3proxy.properties")
-@Profile("!test")
-public class WarmerConfig {
- private final BatikConverter batikConverter;
- private final SlackUrl slackUrl;
- private final WebClient webClient;
-
- public WarmerConfig(
- final BatikConverter batikConverter,
- final SlackUrl slackUrl,
- final WebClient webClient) {
- this.batikConverter = batikConverter;
- this.slackUrl = slackUrl;
- this.webClient = webClient;
- }
-
- @Bean(name = "warmer")
- @Profile("prod")
- public Warmer warmerProd(
- @Value("${s3proxy.server-uri.prod}") final String serverUri,
- @Value("${s3proxy.secret-key.prod}") final String secretKey) {
- return new Warmer(batikConverter, slackUrl, webClient, serverUri, secretKey);
- }
-
- @Bean(name = "warmer")
- @Profile({"dev", "local"})
- public Warmer warmerDev(
- @Value("${s3proxy.server-uri.dev}") final String serverUri,
- @Value("${s3proxy.secret-key.dev}") final String secretKey) {
- return new Warmer(batikConverter, slackUrl, webClient, serverUri, secretKey);
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/domain/Map.java b/backend/src/main/java/com/woowacourse/zzimkkong/domain/Map.java
index 863dfe519..ca0a58000 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/domain/Map.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/domain/Map.java
@@ -26,7 +26,7 @@ public class Map {
@Column(nullable = false)
@Lob
- private String mapImageUrl;
+ private String thumbnail;
@ManyToOne
@JoinColumn(name = "member_id", foreignKey = @ForeignKey(name = "fk_map_member"), nullable = false)
@@ -35,10 +35,10 @@ public class Map {
@OneToMany(mappedBy = "map", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, orphanRemoval = true)
private List spaces = new ArrayList<>();
- public Map(final String name, final String mapDrawing, final String mapImageUrl, final Member member) {
+ public Map(final String name, final String mapDrawing, final String thumbnail, final Member member) {
this.name = name;
this.mapDrawing = mapDrawing;
- this.mapImageUrl = mapImageUrl;
+ this.thumbnail = thumbnail;
this.member = member;
if (member != null) {
@@ -46,8 +46,8 @@ public Map(final String name, final String mapDrawing, final String mapImageUrl,
}
}
- public Map(final Long id, final String name, final String mapDrawing, final String mapImageUrl, final Member member) {
- this(name, mapDrawing, mapImageUrl, member);
+ public Map(final Long id, final String name, final String mapDrawing, final String thumbnail, final Member member) {
+ this(name, mapDrawing, thumbnail, member);
this.id = id;
}
@@ -71,8 +71,8 @@ public Optional findSpaceById(final Long spaceId) {
.findFirst();
}
- public void updateImageUrl(final String mapImageUrl) {
- this.mapImageUrl = mapImageUrl;
+ public void updateThumbnail(final String thumbnail) {
+ this.thumbnail = thumbnail;
}
public void addSpace(final Space space) {
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapCreateUpdateRequest.java b/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapCreateUpdateRequest.java
index 94d172cf9..8b4ff174d 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapCreateUpdateRequest.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapCreateUpdateRequest.java
@@ -17,11 +17,11 @@ public class MapCreateUpdateRequest {
private String mapDrawing;
@NotBlank(message = EMPTY_MESSAGE)
- private String mapImageSvg;
+ private String thumbnail;
- public MapCreateUpdateRequest(final String mapName, final String mapDrawing, final String mapImageSvg) {
+ public MapCreateUpdateRequest(final String mapName, final String mapDrawing, final String thumbnail) {
this.mapName = mapName;
this.mapDrawing = mapDrawing;
- this.mapImageSvg = mapImageSvg;
+ this.thumbnail = thumbnail;
}
}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapFindResponse.java b/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapFindResponse.java
index ea4a04dcc..381cb3d88 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapFindResponse.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/dto/map/MapFindResponse.java
@@ -10,32 +10,32 @@ public class MapFindResponse {
private Long mapId;
private String mapName;
private String mapDrawing;
- private String mapImageUrl;
+ private String thumbnail;
private String sharingMapId;
private String managerEmail;
private MapFindResponse(final Long mapId,
final String mapName,
final String mapDrawing,
- final String mapImageUrl,
+ final String thumbnail,
final String sharingMapId) {
this.mapId = mapId;
this.mapName = mapName;
this.mapDrawing = mapDrawing;
- this.mapImageUrl = mapImageUrl;
+ this.thumbnail = thumbnail;
this.sharingMapId = sharingMapId;
}
private MapFindResponse(final Long mapId,
final String mapName,
final String mapDrawing,
- final String mapImageUrl,
+ final String thumbnail,
final String sharingMapId,
final String managerEmail) {
this.mapId = mapId;
this.mapName = mapName;
this.mapDrawing = mapDrawing;
- this.mapImageUrl = mapImageUrl;
+ this.thumbnail = thumbnail;
this.sharingMapId = sharingMapId;
this.managerEmail = managerEmail;
}
@@ -46,7 +46,7 @@ public static MapFindResponse of(final Map map,
map.getId(),
map.getName(),
map.getMapDrawing(),
- map.getMapImageUrl(),
+ map.getThumbnail(),
sharingMapId
);
}
@@ -57,7 +57,7 @@ public static MapFindResponse ofAdmin(final Map map,
map.getId(),
map.getName(),
map.getMapDrawing(),
- map.getMapImageUrl(),
+ map.getThumbnail(),
sharingMapId,
map.getMember().getEmail()
);
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/BatikConverter.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/BatikConverter.java
deleted file mode 100644
index 9fa382f04..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/BatikConverter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import com.woowacourse.zzimkkong.config.logaspect.LogMethodExecutionTime;
-import com.woowacourse.zzimkkong.exception.infrastructure.SvgToPngConvertException;
-import org.apache.batik.transcoder.TranscoderException;
-import org.apache.batik.transcoder.TranscoderInput;
-import org.apache.batik.transcoder.TranscoderOutput;
-import org.apache.batik.transcoder.image.PNGTranscoder;
-import org.springframework.stereotype.Component;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-@Component
-@LogMethodExecutionTime(group = "infrastructure")
-public class BatikConverter implements SvgConverter {
- private final PNGTranscoder pngTranscoder = new PNGTranscoder();
-
- @Override
- public void convertSvgToPng(InputStream inputStream, OutputStream outputStream) {
- try {
- TranscoderInput transcoderInput = new TranscoderInput(inputStream);
- TranscoderOutput transcoderOutput = new TranscoderOutput(outputStream);
-
- pngTranscoder.transcode(transcoderInput, transcoderOutput);
- } catch (TranscoderException e) {
- throw new SvgToPngConvertException(e);
- }
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/S3ProxyUploader.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/S3ProxyUploader.java
deleted file mode 100644
index a6a155409..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/S3ProxyUploader.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import com.woowacourse.zzimkkong.config.logaspect.LogMethodExecutionTime;
-import com.woowacourse.zzimkkong.exception.infrastructure.S3ProxyRespondedFailException;
-import com.woowacourse.zzimkkong.exception.infrastructure.S3UploadException;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.MultipartBodyBuilder;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
-
-import java.io.InputStream;
-import java.util.Objects;
-
-@LogMethodExecutionTime(group = "infrastructure")
-public class S3ProxyUploader implements StorageUploader {
- private static final String PATH_DELIMITER = "/";
- private static final String API_PATH = "/api/storage";
- private static final String CONTENT_DISPOSITION_HEADER_VALUE_FORMAT = "form-data; name=file; filename=%s";
-
- private final WebClient proxyServerClient;
- private final String secretKey;
-
- public S3ProxyUploader(
- @Value("${s3proxy.server-uri}") final String serverUri,
- final String secretKey,
- final WebClient webClient) {
- this.proxyServerClient = webClient.mutate()
- .baseUrl(serverUri)
- .build();
- this.secretKey = secretKey;
- }
-
- @Override
- public String upload(String directoryName, String uploadFileName, InputStream inputStream) {
- MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
- multipartBodyBuilder.part("file", new InputStreamResource(inputStream))
- .header(HttpHeaders.CONTENT_DISPOSITION,
- String.format(CONTENT_DISPOSITION_HEADER_VALUE_FORMAT, uploadFileName));
-
- return requestMultipartUpload(directoryName, multipartBodyBuilder);
- }
-
- private String requestMultipartUpload(String directoryName, MultipartBodyBuilder multipartBodyBuilder) {
- return proxyServerClient
- .method(HttpMethod.POST)
- .uri(String.join(PATH_DELIMITER, API_PATH, directoryName))
- .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
- .header(HttpHeaders.AUTHORIZATION, secretKey)
- .body(BodyInserters.fromMultipartData(multipartBodyBuilder.build()))
- .exchangeToMono(clientResponse -> {
- if (clientResponse.statusCode().equals(HttpStatus.CREATED)) {
- String location = Objects.requireNonNull(
- clientResponse.headers().asHttpHeaders().get(HttpHeaders.LOCATION))
- .stream().findFirst()
- .orElseThrow(S3UploadException::new);
- return Mono.just(location);
- }
- return Mono.error(S3ProxyRespondedFailException::new);
- })
- .block();
- }
-
- @Override
- public void delete(String directoryName, String fileName) {
- proxyServerClient
- .method(HttpMethod.DELETE)
- .uri(String.join(PATH_DELIMITER, API_PATH, directoryName, fileName))
- .retrieve()
- .bodyToMono(String.class)
- .block();
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/StorageUploader.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/StorageUploader.java
deleted file mode 100644
index e4a03d18d..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/StorageUploader.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import java.io.InputStream;
-
-public interface StorageUploader {
- String upload(final String directoryName, String uploadFileName, final InputStream inputStream);
-
- void delete(final String directoryName, final String fileName);
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/SvgConverter.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/SvgConverter.java
deleted file mode 100644
index e7808ea78..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/SvgConverter.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public interface SvgConverter {
- void convertSvgToPng(final InputStream inputStream, final OutputStream outputStream);
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManager.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManager.java
deleted file mode 100644
index 1400277b9..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManager.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import com.woowacourse.zzimkkong.domain.Map;
-
-public interface ThumbnailManager {
- String uploadMapThumbnail(final String svgData, final Map map);
-
- void deleteThumbnail(final Map map);
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManagerImpl.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManagerImpl.java
deleted file mode 100644
index dc02db47b..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/thumbnail/ThumbnailManagerImpl.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.thumbnail;
-
-import com.woowacourse.zzimkkong.domain.Map;
-import com.woowacourse.zzimkkong.exception.infrastructure.CannotGenerateInputStreamFromSvgDataException;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import java.io.*;
-
-@Component
-public class ThumbnailManagerImpl implements ThumbnailManager {
- public static final String THUMBNAIL_EXTENSION = ".png";
- private static final String THUMBNAIL_FILE_FORMAT = "%s";
-
- private final SvgConverter svgConverter;
- private final StorageUploader storageUploader;
- private final String thumbnailsDirectoryName;
-
- public ThumbnailManagerImpl(
- final SvgConverter svgConverter,
- final StorageUploader storageUploader,
- @Value("${storage.thumbnails-directory}") final String thumbnailsDirectoryName) {
- this.svgConverter = svgConverter;
- this.storageUploader = storageUploader;
- this.thumbnailsDirectoryName = thumbnailsDirectoryName;
- }
-
- public String uploadMapThumbnail(final String svgData, final Map map) {
- try (final ByteArrayInputStream svgInputStream = new ByteArrayInputStream(svgData.getBytes());
- final ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream()) {
- final BufferedInputStream bufferedSvgInputStream = new BufferedInputStream(svgInputStream);
- final BufferedOutputStream bufferedPngOutputStream = new BufferedOutputStream(pngOutputStream);
-
- final String fileName = makeThumbnailFileName(map);
- svgConverter.convertSvgToPng(bufferedSvgInputStream, bufferedPngOutputStream);
-
- return uploadFromByteArray(fileName, pngOutputStream.toByteArray());
- } catch (IOException exception) {
- throw new CannotGenerateInputStreamFromSvgDataException(exception);
- }
- }
-
- private String makeThumbnailFileName(final Map map) {
- return String.format(THUMBNAIL_FILE_FORMAT, map.getId().toString() + THUMBNAIL_EXTENSION);
- }
-
- private String uploadFromByteArray(String fileName, byte[] byteArray) throws IOException {
- try (final BufferedInputStream bufferedPngInputStream = new BufferedInputStream(new ByteArrayInputStream(byteArray))) {
- return storageUploader.upload(thumbnailsDirectoryName, fileName, bufferedPngInputStream);
- }
- }
-
- public void deleteThumbnail(final Map map) {
- String fileName = makeThumbnailFileName(map);
- storageUploader.delete(thumbnailsDirectoryName, fileName + THUMBNAIL_EXTENSION);
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/warmup/Warmer.java b/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/warmup/Warmer.java
deleted file mode 100644
index 236eb9f58..000000000
--- a/backend/src/main/java/com/woowacourse/zzimkkong/infrastructure/warmup/Warmer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.woowacourse.zzimkkong.infrastructure.warmup;
-
-import com.woowacourse.zzimkkong.domain.SlackUrl;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.BatikConverter;
-import lombok.extern.slf4j.Slf4j;
-import org.slf4j.MDC;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.MultipartBodyBuilder;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
-
-import java.io.*;
-
-@Slf4j
-public class Warmer {
- private final BatikConverter batikConverter;
- private final SlackUrl slackUrl;
- private final WebClient webClient;
- private final String s3ProxyServerUri;
- private final String s3ProxyServerSecretKey;
-
- public Warmer(
- final BatikConverter batikConverter,
- final SlackUrl slackUrl,
- final WebClient webClient,
- final String s3ProxyServerUri,
- final String s3ProxyServerSecretKey) {
- this.batikConverter = batikConverter;
- this.slackUrl = slackUrl;
- this.webClient = webClient;
- this.s3ProxyServerUri = s3ProxyServerUri;
- this.s3ProxyServerSecretKey = s3ProxyServerSecretKey;
- }
-
- public void warmUp() {
- log.info("warm up을 시작합니다");
-
- initSvgConverter();
- initWebClient();
-
- log.info("warm up이 완료 되었습니다.");
- }
-
- private void initSvgConverter() {
- String svgData = "";
-
- try (final ByteArrayInputStream svgInputStream = new ByteArrayInputStream(svgData.getBytes());
- final ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream()) {
- final BufferedInputStream bufferedSvgInputStream = new BufferedInputStream(svgInputStream);
- final BufferedOutputStream bufferedPngOutputStream = new BufferedOutputStream(pngOutputStream);
- batikConverter.convertSvgToPng(bufferedSvgInputStream, bufferedPngOutputStream);
- } catch (IOException ignored) {
- }
- }
-
- private void initWebClient() {
- webClient
- .post()
- .uri(slackUrl.getUrl())
- .contentType(MediaType.APPLICATION_JSON)
- .bodyValue("let's warm up")
- .retrieve()
- .bodyToMono(String.class)
- .onErrorResume(e -> Mono.just("warm up finisehd"))
- .subscribe();
-
- try (final BufferedInputStream bufferedPngInputStream = new BufferedInputStream(new ByteArrayInputStream("warmUp".getBytes()))) {
- MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
- multipartBodyBuilder.part("file", new InputStreamResource(bufferedPngInputStream))
- .header(HttpHeaders.CONTENT_DISPOSITION, "form-data; name=file; filename=warmFile");
-
- webClient
- .post()
- .uri(s3ProxyServerUri + "/api/storage/warmup")
- .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
- .header(HttpHeaders.AUTHORIZATION, s3ProxyServerSecretKey)
- .body(BodyInserters.fromMultipartData(multipartBodyBuilder.build()))
- .retrieve()
- .bodyToMono(String.class)
- .onErrorResume(e -> Mono.just("warm up finished"))
- .block();
- } catch (IOException ignored) {
- }
- }
-}
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/service/MapService.java b/backend/src/main/java/com/woowacourse/zzimkkong/service/MapService.java
index 8c762ed45..2505bb542 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/service/MapService.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/service/MapService.java
@@ -7,13 +7,12 @@
import com.woowacourse.zzimkkong.dto.map.MapCreateUpdateRequest;
import com.woowacourse.zzimkkong.dto.map.MapFindAllResponse;
import com.woowacourse.zzimkkong.dto.map.MapFindResponse;
+import com.woowacourse.zzimkkong.dto.member.LoginEmailDto;
import com.woowacourse.zzimkkong.exception.authorization.NoAuthorityOnMapException;
import com.woowacourse.zzimkkong.exception.map.NoSuchMapException;
import com.woowacourse.zzimkkong.exception.member.NoSuchMemberException;
import com.woowacourse.zzimkkong.exception.space.ReservationExistOnSpaceException;
-import com.woowacourse.zzimkkong.dto.member.LoginEmailDto;
import com.woowacourse.zzimkkong.infrastructure.sharingid.SharingIdGenerator;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.ThumbnailManager;
import com.woowacourse.zzimkkong.repository.MapRepository;
import com.woowacourse.zzimkkong.repository.MemberRepository;
import com.woowacourse.zzimkkong.repository.ReservationRepository;
@@ -32,19 +31,16 @@ public class MapService {
private final MemberRepository members;
private final MapRepository maps;
private final ReservationRepository reservations;
- private final ThumbnailManager thumbnailManager;
private final SharingIdGenerator sharingIdGenerator;
public MapService(
final MemberRepository members,
final MapRepository maps,
final ReservationRepository reservations,
- final ThumbnailManager thumbnailManager,
final SharingIdGenerator sharingIdGenerator) {
this.members = members;
this.maps = maps;
this.reservations = reservations;
- this.thumbnailManager = thumbnailManager;
this.sharingIdGenerator = sharingIdGenerator;
}
@@ -54,12 +50,9 @@ public MapCreateResponse saveMap(final MapCreateUpdateRequest mapCreateUpdateReq
Map saveMap = maps.save(new Map(
mapCreateUpdateRequest.getMapName(),
mapCreateUpdateRequest.getMapDrawing(),
- mapCreateUpdateRequest.getMapImageSvg().substring(0, 10),
+ mapCreateUpdateRequest.getThumbnail(),
manager));
- final String thumbnailUrl = thumbnailManager.uploadMapThumbnail(mapCreateUpdateRequest.getMapImageSvg(), saveMap);
- saveMap.updateImageUrl(thumbnailUrl);
-
return MapCreateResponse.from(saveMap);
}
@@ -99,7 +92,6 @@ public void updateMap(final Long mapId,
.orElseThrow(NoSuchMapException::new);
validateManagerOfMap(map, loginEmailDto.getEmail());
- thumbnailManager.uploadMapThumbnail(mapCreateUpdateRequest.getMapImageSvg(), map);
map.update(
mapCreateUpdateRequest.getMapName(),
mapCreateUpdateRequest.getMapDrawing());
@@ -113,7 +105,6 @@ public void deleteMap(final Long mapId, final LoginEmailDto loginEmailDto) {
validateExistReservations(map);
maps.delete(map);
- thumbnailManager.deleteThumbnail(map);
}
private void validateExistReservations(final Map map) {
diff --git a/backend/src/main/java/com/woowacourse/zzimkkong/service/SpaceService.java b/backend/src/main/java/com/woowacourse/zzimkkong/service/SpaceService.java
index 7b52d0fff..2c7d40aca 100644
--- a/backend/src/main/java/com/woowacourse/zzimkkong/service/SpaceService.java
+++ b/backend/src/main/java/com/woowacourse/zzimkkong/service/SpaceService.java
@@ -9,7 +9,6 @@
import com.woowacourse.zzimkkong.exception.map.NoSuchMapException;
import com.woowacourse.zzimkkong.exception.space.NoSuchSpaceException;
import com.woowacourse.zzimkkong.exception.space.ReservationExistOnSpaceException;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.ThumbnailManager;
import com.woowacourse.zzimkkong.repository.MapRepository;
import com.woowacourse.zzimkkong.repository.ReservationRepository;
import com.woowacourse.zzimkkong.repository.SpaceRepository;
@@ -25,17 +24,14 @@ public class SpaceService {
private final MapRepository maps;
private final SpaceRepository spaces;
private final ReservationRepository reservations;
- private final ThumbnailManager thumbnailManager;
public SpaceService(
final MapRepository maps,
final SpaceRepository spaces,
- final ReservationRepository reservations,
- final ThumbnailManager thumbnailManager) {
+ final ReservationRepository reservations) {
this.maps = maps;
this.spaces = spaces;
this.reservations = reservations;
- this.thumbnailManager = thumbnailManager;
}
public SpaceCreateResponse saveSpace(
@@ -57,7 +53,6 @@ public SpaceCreateResponse saveSpace(
.build();
Space saveSpace = spaces.save(space);
- thumbnailManager.uploadMapThumbnail(spaceCreateUpdateRequest.getMapImageSvg(), map);
return SpaceCreateResponse.from(saveSpace);
}
@@ -119,7 +114,6 @@ public void updateSpace(
.build();
space.update(updateSpace);
- thumbnailManager.uploadMapThumbnail(spaceCreateUpdateRequest.getMapImageSvg(), map);
}
public void deleteSpace(
@@ -137,7 +131,6 @@ public void deleteSpace(
validateReservationExistence(spaceId);
spaces.delete(space);
- thumbnailManager.uploadMapThumbnail(spaceDeleteRequest.getMapImageSvg(), map);
}
private Setting getSetting(final SpaceCreateUpdateRequest spaceCreateUpdateRequest) {
diff --git a/backend/src/main/resources/db/migration/prod/V13__thumbnail_as_svg.sql b/backend/src/main/resources/db/migration/prod/V13__thumbnail_as_svg.sql
new file mode 100644
index 000000000..1357c4398
--- /dev/null
+++ b/backend/src/main/resources/db/migration/prod/V13__thumbnail_as_svg.sql
@@ -0,0 +1,11 @@
+SET foreign_key_checks = 0;
+
+TRUNCATE TABLE map;
+TRUNCATE TABLE member;
+TRUNCATE TABLE preset;
+TRUNCATE TABLE reservation;
+TRUNCATE TABLE space;
+
+SET foreign_key_checks = 1;
+
+ALTER TABLE map CHANGE COLUMN map_image_url thumbnail longtext not null;
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/Constants.java b/backend/src/test/java/com/woowacourse/zzimkkong/Constants.java
index 2a46adade..2fbb59ef4 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/Constants.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/Constants.java
@@ -21,7 +21,6 @@ private Constants() {
public static final String DESCRIPTION = "찜꽁 1차 회의";
public static final String USER_NAME = "찜꽁";
public static final String RESERVATION_PW = "1234";
- public static final String MAP_IMAGE_URL = "https://zzimkkong-personal.s3.ap-northeast-2.amazonaws.com/thumbnails/2387563.png";
public static final String MAP_SVG = "";
public static final String SPACE_DRAWING = "{ \"id\": \"1\", \"type\" : \"rect\", \"x\": \"10\", \"y\": \"10\", \"width\": \"30\", \"height\": \"30\" }";
public static final String LUTHER_NAME = "루터회관";
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java
index 1aac0fa30..fb5e82e14 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java
@@ -9,7 +9,6 @@
import com.woowacourse.zzimkkong.dto.space.SpaceCreateUpdateRequest;
import com.woowacourse.zzimkkong.infrastructure.oauth.GithubRequester;
import com.woowacourse.zzimkkong.infrastructure.oauth.GoogleRequester;
-import com.woowacourse.zzimkkong.infrastructure.thumbnail.StorageUploader;
import io.restassured.RestAssured;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.specification.RequestSpecification;
@@ -88,9 +87,6 @@ class AcceptanceTest {
@Autowired
private DatabaseCleaner databaseCleaner;
- @MockBean
- private StorageUploader storageUploader;
-
@Autowired
protected PasswordEncoder passwordEncoder;
@@ -110,9 +106,6 @@ void setUp(RestDocumentationContextProvider restDocumentation) {
saveMember(memberSaveRequest);
accessToken = getToken();
-
- given(storageUploader.upload(anyString(), anyString(), any(InputStream.class)))
- .willReturn(MAP_IMAGE_URL);
}
@AfterEach
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java
index 7a4725c14..c3d6760f5 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java
@@ -1,5 +1,6 @@
package com.woowacourse.zzimkkong.controller;
+import com.woowacourse.zzimkkong.Constants;
import com.woowacourse.zzimkkong.domain.*;
import com.woowacourse.zzimkkong.dto.admin.*;
import com.woowacourse.zzimkkong.dto.map.MapFindResponse;
@@ -40,7 +41,7 @@ class AdminControllerTest extends AcceptanceTest {
private SlackService slackService;
private static final Member POBI = new Member(memberSaveRequest.getEmail(), memberSaveRequest.getPassword(), memberSaveRequest.getOrganization());
- private static final Map LUTHER = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, POBI);
+ private static final Map LUTHER = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, POBI);
private static final Setting BE_SETTING = Setting.builder()
.availableStartTime(BE_AVAILABLE_START_TIME)
.availableEndTime(BE_AVAILABLE_END_TIME)
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestReservationControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestReservationControllerTest.java
index 87cd9b03a..00dc7b35b 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestReservationControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestReservationControllerTest.java
@@ -1,5 +1,6 @@
package com.woowacourse.zzimkkong.controller;
+import com.woowacourse.zzimkkong.Constants;
import com.woowacourse.zzimkkong.domain.*;
import com.woowacourse.zzimkkong.dto.reservation.*;
import com.woowacourse.zzimkkong.service.slack.SlackService;
@@ -62,7 +63,7 @@ void setUp() {
SALLY_DESCRIPTION);
Member pobi = new Member(EMAIL, passwordEncoder.encode(PW), ORGANIZATION);
- Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
+ Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
Setting beSetting = Setting.builder()
.availableStartTime(BE_AVAILABLE_START_TIME)
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestSpaceControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestSpaceControllerTest.java
index 2b54ee2ff..76404468f 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestSpaceControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/GuestSpaceControllerTest.java
@@ -1,5 +1,6 @@
package com.woowacourse.zzimkkong.controller;
+import com.woowacourse.zzimkkong.Constants;
import com.woowacourse.zzimkkong.domain.Map;
import com.woowacourse.zzimkkong.domain.Member;
import com.woowacourse.zzimkkong.domain.Setting;
@@ -39,7 +40,7 @@ void setUp() {
Long feSpaceId = Long.valueOf(saveFe1SpaceResponse.header("location").split("/")[6]);
Member pobi = new Member(EMAIL, passwordEncoder.encode(PW), ORGANIZATION);
- Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
+ Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
Setting beSetting = Setting.builder()
.availableStartTime(BE_AVAILABLE_START_TIME)
.availableEndTime(BE_AVAILABLE_END_TIME)
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerReservationControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerReservationControllerTest.java
index 31c5a0fbf..953389800 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerReservationControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerReservationControllerTest.java
@@ -60,7 +60,7 @@ void setUp() {
SALLY_DESCRIPTION);
Member pobi = new Member(EMAIL, passwordEncoder.encode(PW), ORGANIZATION);
- Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
+ Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
Setting beSetting = Setting.builder()
.availableStartTime(BE_AVAILABLE_START_TIME)
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerSpaceControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerSpaceControllerTest.java
index 28ef82ed8..5464241b3 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerSpaceControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/ManagerSpaceControllerTest.java
@@ -41,7 +41,7 @@ void setUp() {
Long feSpaceId = Long.valueOf(saveFe1SpaceResponse.header("location").split("/")[6]);
Member pobi = new Member(EMAIL, passwordEncoder.encode(PW), ORGANIZATION);
- Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
+ Map luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
Setting beSetting = Setting.builder()
.availableStartTime(BE_AVAILABLE_START_TIME)
.availableEndTime(BE_AVAILABLE_END_TIME)
diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/MapControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/MapControllerTest.java
index 61fdcc1de..a18e77dd8 100644
--- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/MapControllerTest.java
+++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/MapControllerTest.java
@@ -1,5 +1,6 @@
package com.woowacourse.zzimkkong.controller;
+import com.woowacourse.zzimkkong.Constants;
import com.woowacourse.zzimkkong.domain.Map;
import com.woowacourse.zzimkkong.domain.Member;
import com.woowacourse.zzimkkong.dto.map.MapCreateUpdateRequest;
@@ -43,8 +44,8 @@ void setUp() {
// For Test Comparison
pobi = new Member(EMAIL, passwordEncoder.encode(PW), ORGANIZATION);
- luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
- smallHouse = new Map(SMALL_HOUSE_NAME, MAP_DRAWING_DATA, MAP_IMAGE_URL, pobi);
+ luther = new Map(LUTHER_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
+ smallHouse = new Map(SMALL_HOUSE_NAME, MAP_DRAWING_DATA, MAP_SVG, pobi);
}
@Test
@@ -72,8 +73,8 @@ void findAll() {
String lutherId = createdMapApi.split("/")[4];
String smallHouseId = smallHouseCreatedMapApi.header("location").split("/")[4];
- Map lutherWithId = new Map(Long.parseLong(lutherId), luther.getName(), luther.getMapDrawing(), luther.getMapImageUrl(), luther.getMember());
- Map smallHouseWithId = new Map(Long.parseLong(smallHouseId), smallHouse.getName(), smallHouse.getMapDrawing(), smallHouse.getMapImageUrl(), smallHouse.getMember());
+ Map lutherWithId = new Map(Long.parseLong(lutherId), luther.getName(), luther.getMapDrawing(), luther.getThumbnail(), luther.getMember());
+ Map smallHouseWithId = new Map(Long.parseLong(smallHouseId), smallHouse.getName(), smallHouse.getMapDrawing(), smallHouse.getThumbnail(), smallHouse.getMember());
Iterator