Skip to content

Commit

Permalink
20240406
Browse files Browse the repository at this point in the history
  • Loading branch information
laigasus committed Apr 7, 2024
1 parent d3c0f3b commit c685d1f
Show file tree
Hide file tree
Showing 56 changed files with 877 additions and 515 deletions.
2 changes: 2 additions & 0 deletions app/src/main/java/blisgo/app/BlisgoApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
import blisgo.usecase.UseCaseRoot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

import java.util.TimeZone;

@EnableConfigurationProperties
@SpringBootApplication(scanBasePackageClasses = {
InternalRoot.class,
DomainRoot.class,
Expand Down
280 changes: 171 additions & 109 deletions app/src/main/resources/data.sql

Large diffs are not rendered by default.

130 changes: 66 additions & 64 deletions app/src/main/resources/db/migration/V8__insert_dogam.sql
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));
6 changes: 0 additions & 6 deletions domain/src/main/java/blisgo/domain/common/Content.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,4 @@ public class Content {
private String text;
private Picture thumbnail;
private String preview;

public static Content of(String text) {
return Content.builder()
.text(text)
.build();
}
}
12 changes: 4 additions & 8 deletions domain/src/main/java/blisgo/domain/community/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,21 @@ public class Post {
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;

public static Post create(Long postId, String title, String content) {
public static Post create(Long postId, String title, Content content) {
return Post.builder()
.postId(PostId.of(postId))
.title(title)
.content(Content.of(content))
.content(content)
.build();
}

public static Post create(String title, String content) {
public static Post create(String title, Content content) {
return Post.builder()
.title(title)
.content(Content.of(content))
.content(content)
.build();
}

public void likePost() {
this.likes++;
}

public boolean isAuthor(String email) {
return this.author.email().equals(email);
}
Expand Down
10 changes: 8 additions & 2 deletions infrastructure/external/build.gradle
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:+'
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

@Component
@RequiredArgsConstructor
@Description("캐시에 저장된 조회수를 DB에 업데이트하는 스케줄러")
@Description("캐시에 저장된 조회수를 DB에 갱신하는 스케줄러")
public class ViewCountScheduler {
private final ViewCountCache viewCountCache;
private final PostMySQLAdapter postMySQLAdapter;
Expand Down
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();
}
}
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();
}
}
10 changes: 2 additions & 8 deletions infrastructure/internal/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ plugins {
id 'io.swagger.swaggerhub' version '+'
}

ext {
springCloudVersion = "2023.0.1"
}

bootJar.enabled = false
jar.enabled = true

description = 'infra 내부요소로 spring framework과 직결되는 자원을 이곳에 위치시킨다'

dependencies {
implementation project(':domain')
implementation project(':usecase')
Expand Down Expand Up @@ -50,10 +48,6 @@ dependencies {
implementation 'org.thymeleaf.extras:thymeleaf-extras-java8time:+'

implementation 'org.springframework.boot:spring-boot-starter-web'

// flyway
implementation 'org.flywaydb:flyway-core:+'
implementation 'org.flywaydb:flyway-mysql:+'
}

def querydslDir = "${project.projectDir}/build/generated/querydsl"
Expand Down
Loading

0 comments on commit c685d1f

Please sign in to comment.