-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
56 changed files
with
877 additions
and
515 deletions.
There are no files selected for viewing
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
Large diffs are not rendered by default.
Oops, something went wrong.
130 changes: 66 additions & 64 deletions
130
app/src/main/resources/db/migration/V8__insert_dogam.sql
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,67 +1,69 @@ | ||
SET @time := NOW(); | ||
|
||
SET @member_id = UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')); | ||
|
||
INSERT INTO dogam (member_id, waste_id, created_date) | ||
VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1001, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1002, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1003, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1004, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1005, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1006, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1007, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1008, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1009, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1010, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1011, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1012, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1013, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1014, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1015, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1016, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1017, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1018, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1019, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1020, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1021, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1022, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1023, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1024, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1025, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1026, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1027, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1028, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1029, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1030, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1031, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1032, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1033, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1034, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1035, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1036, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1037, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1038, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1039, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1040, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1041, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1042, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1043, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1044, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1045, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1046, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1047, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1048, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1049, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1050, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1051, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1052, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1053, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1054, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1055, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1056, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1057, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1058, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1059, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1060, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1061, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1062, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1063, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1064, @time := DATE_ADD(@time, INTERVAL 1 SECOND)); | ||
VALUES (@member_id, 1001, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1002, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1003, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1004, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1005, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1006, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1007, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1008, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1009, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1010, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1011, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1012, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1013, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1014, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1015, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1016, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1017, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1018, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1019, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1020, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1021, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1022, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1023, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1024, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1025, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1026, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1027, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1028, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1029, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1030, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1031, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1032, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1033, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1034, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1035, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1036, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1037, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1038, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1039, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1040, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1041, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1042, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1043, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1044, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1045, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1046, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1047, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1048, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1049, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1050, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1051, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1052, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1053, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1054, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1055, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1056, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1057, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1058, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1059, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1060, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1061, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1062, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1063, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), | ||
(@member_id, 1064, @time := DATE_ADD(@time, INTERVAL 1 SECOND)); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,19 @@ | ||
bootJar.enabled = false | ||
jar.enabled = true | ||
|
||
description = 'redis 를 사용하여 세션관리' | ||
|
||
dependencies { | ||
implementation project(':usecase') | ||
implementation project(':infrastructure:internal') | ||
|
||
implementation 'org.springframework.session:spring-session-data-redis' | ||
implementation 'org.springframework.boot:spring-boot-starter-data-redis' | ||
developmentOnly 'org.springframework.boot:spring-boot-docker-compose' | ||
|
||
// flyway migration | ||
implementation 'org.flywaydb:flyway-core:+' | ||
implementation 'org.flywaydb:flyway-mysql:+' | ||
|
||
// file uploader | ||
implementation 'com.cloudinary:cloudinary-core:+' | ||
implementation 'com.cloudinary:cloudinary-http45:+' | ||
} |
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
19 changes: 19 additions & 0 deletions
19
...rnal/src/main/java/blisgo/infrastructure/external/scheduler/WastePopularityScheduler.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 blisgo.infrastructure.external.scheduler; | ||
|
||
import blisgo.infrastructure.internal.persistence.dictionary.WasteMySQLAdapter; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.context.annotation.Description; | ||
import org.springframework.scheduling.annotation.Scheduled; | ||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
@Description("쓰레기 인기도를 갱신하는 스케줄러") | ||
public class WastePopularityScheduler { | ||
private final WasteMySQLAdapter wasteMySQLAdapter; | ||
|
||
@Scheduled(zone = "UTC", cron = "0 0 0 * * *") | ||
public void updateWastePopularity() { | ||
wasteMySQLAdapter.updateWastePopularity(); | ||
} | ||
} |
88 changes: 88 additions & 0 deletions
88
...ture/external/src/main/java/blisgo/infrastructure/external/uploader/CloudinaryClient.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,88 @@ | ||
package blisgo.infrastructure.external.uploader; | ||
|
||
import blisgo.usecase.port.infra.FileUploadOutputPort; | ||
import com.cloudinary.Cloudinary; | ||
import com.cloudinary.Transformation; | ||
import jakarta.annotation.PostConstruct; | ||
import lombok.RequiredArgsConstructor; | ||
import org.jmolecules.architecture.hexagonal.SecondaryAdapter; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.core.io.Resource; | ||
import org.springframework.stereotype.Component; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.net.URI; | ||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
import java.nio.file.Paths; | ||
import java.nio.file.StandardCopyOption; | ||
import java.util.Map; | ||
import java.util.Objects; | ||
import java.util.UUID; | ||
|
||
@SecondaryAdapter | ||
@Component | ||
@RequiredArgsConstructor | ||
public class CloudinaryClient implements FileUploadOutputPort { | ||
private Cloudinary cloudinary; | ||
|
||
@Value("${cloudinary.cloud-name}") | ||
private String cloudName; | ||
|
||
@Value("${cloudinary.api-key}") | ||
private String apiKey; | ||
|
||
@Value("${cloudinary.api-secret}") | ||
private String apiSecret; | ||
|
||
@PostConstruct | ||
private void init() { | ||
cloudinary = new Cloudinary(Map.ofEntries( | ||
Map.entry("cloud_name", cloudName), | ||
Map.entry("api_key", apiKey), | ||
Map.entry("api_secret", apiSecret) | ||
)); | ||
} | ||
|
||
@Override | ||
public URI uploadFile(Resource resource) { | ||
var transformation = new Transformation() | ||
.quality("auto") | ||
.crop("scale") | ||
.fetchFormat("webp"); | ||
|
||
String originalFilename = resource.getFilename(); | ||
String extension = Objects.requireNonNull(originalFilename) | ||
.substring(originalFilename.lastIndexOf(".") + 1); | ||
String newFilename = UUID.randomUUID() + "." + extension; | ||
Path tmpPath = Paths.get(newFilename); | ||
|
||
var map = Map.ofEntries( | ||
Map.entry("folder", "board"), | ||
Map.entry("resource_type", "auto"), | ||
Map.entry("format", extension), | ||
Map.entry("transformation", transformation) | ||
); | ||
|
||
try { | ||
Files.copy(resource.getInputStream(), tmpPath, StandardCopyOption.REPLACE_EXISTING); | ||
File tmpFile = tmpPath.toFile(); | ||
var result = cloudinary.uploader().upload(tmpFile, map); | ||
var option = "q_auto,f_webp/"; | ||
var location = addOpt((String) Objects.requireNonNull(result).get("secure_url"), option); | ||
Files.deleteIfExists(tmpPath); | ||
return URI.create(location); | ||
} catch (IOException e) { | ||
throw new RuntimeException(e); | ||
} | ||
} | ||
|
||
private String addOpt(String str, String opt) { | ||
StringBuilder sb = new StringBuilder(); | ||
sb.append(str); | ||
int appendIndex = sb.indexOf("/v") + 1; | ||
sb.insert(appendIndex, opt); | ||
return sb.toString(); | ||
} | ||
} |
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.