From a96aae685efdb2284b7ffadddee4cb613da8ff4c Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 15:10:41 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor:=20key=EC=97=90=EC=84=9C=20shorten?= =?UTF-8?q?UrlKey=EB=A1=9C=20=EB=B3=80=EC=88=98=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onembackendjava/application/UrlShortenService.java | 10 +++++----- .../infrastructure/UrlShortenRepository.java | 8 ++++---- .../presentation/UrlShortenController.java | 6 +++--- .../application/UrlShortenServiceTest.java | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java index e3e069c..89c427e 100644 --- a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java @@ -16,15 +16,15 @@ public UrlShortenService(UrlShortenRepository urlShortenRepository) { this.urlShortenRepository = urlShortenRepository; } - public String getOriginUrlByKey(String key) { - return urlShortenRepository.findByKey(key) + public String getOriginUrlByShortenUrlKey(String shortenUrlKey) { + return urlShortenRepository.findByShortenUrlKey(shortenUrlKey) .orElseThrow(() -> new NoSuchElementException("존재하지 않는 key입니다.")); } public String createShortenUrl(String originUrl) { - String key = generateKey(); - urlShortenRepository.save(key, originUrl); - return key; + String shortenUrlKey = generateKey(); + urlShortenRepository.save(shortenUrlKey, originUrl); + return shortenUrlKey; } private String generateKey() { diff --git a/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java b/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java index 1fe88ba..9078e3e 100644 --- a/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java +++ b/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java @@ -10,11 +10,11 @@ public class UrlShortenRepository { private final Map shortenUrls = new HashMap<>(); - public Optional findByKey(String key) { - return Optional.ofNullable(shortenUrls.get(key)); + public Optional findByShortenUrlKey(String shortenUrlKey) { + return Optional.ofNullable(shortenUrls.get(shortenUrlKey)); } - public void save(String key, String originUrl) { - shortenUrls.put(key, originUrl); + public void save(String shortenUrlKey, String originUrl) { + shortenUrls.put(shortenUrlKey, originUrl); } } diff --git a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java b/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java index a1368db..a9a70c4 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java +++ b/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java @@ -16,9 +16,9 @@ public UrlShortenController(UrlShortenService urlShortenService) { this.urlShortenService = urlShortenService; } - @GetMapping("/shorten-url/{key}") - public String getOriginUrlByKey(@PathVariable String key) { - return urlShortenService.getOriginUrlByKey(key); + @GetMapping("/shorten-url/{shortenUrlKey}") + public String getOriginUrlByShortenUrlKey(@PathVariable String shortenUrlKey) { + return urlShortenService.getOriginUrlByShortenUrlKey(shortenUrlKey); } @PostMapping("/shorten-url") diff --git a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java index 8b8c43b..32ebf1b 100644 --- a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java +++ b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java @@ -19,7 +19,7 @@ class UrlShortenServiceTest { void shorten_url을_생성하고_조회한다() { String expectedOriginUrl = "https://www.google.com"; String key = urlShortenService.createShortenUrl(expectedOriginUrl); - String originUrl = urlShortenService.getOriginUrlByKey(key); + String originUrl = urlShortenService.getOriginUrlByShortenUrlKey(key); assertThat(originUrl).isEqualTo(expectedOriginUrl); } @@ -29,7 +29,7 @@ class UrlShortenServiceTest { String nonExistingKey = "nonExistingKey"; assertThrows(NoSuchElementException.class, () -> { - urlShortenService.getOriginUrlByKey(nonExistingKey); + urlShortenService.getOriginUrlByShortenUrlKey(nonExistingKey); }); } From 321b8a25af500f8eb8d58e57dbbab651fba6e52a Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 16:33:26 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20=EC=A0=84=EC=97=AD=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/UrlShortenService.java | 3 ++- .../domain/NotFoundShortenUrlException.java | 6 ++++++ .../presentation/GlobalExceptionHandler.java | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java create mode 100644 src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java diff --git a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java index 89c427e..d24addb 100644 --- a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java @@ -1,5 +1,6 @@ package community.whatever.onembackendjava.application; +import community.whatever.onembackendjava.domain.NotFoundShortenUrlException; import community.whatever.onembackendjava.infrastructure.UrlShortenRepository; import java.util.NoSuchElementException; import java.util.Random; @@ -18,7 +19,7 @@ public UrlShortenService(UrlShortenRepository urlShortenRepository) { public String getOriginUrlByShortenUrlKey(String shortenUrlKey) { return urlShortenRepository.findByShortenUrlKey(shortenUrlKey) - .orElseThrow(() -> new NoSuchElementException("존재하지 않는 key입니다.")); + .orElseThrow(NotFoundShortenUrlException::new); } public String createShortenUrl(String originUrl) { diff --git a/src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java b/src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java new file mode 100644 index 0000000..b61e221 --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java @@ -0,0 +1,6 @@ +package community.whatever.onembackendjava.domain; + + +public class NotFoundShortenUrlException extends RuntimeException { + +} diff --git a/src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java b/src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java new file mode 100644 index 0000000..038f4f6 --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java @@ -0,0 +1,17 @@ +package community.whatever.onembackendjava.presentation; + +import community.whatever.onembackendjava.domain.NotFoundShortenUrlException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GlobalExceptionHandler { + + @ExceptionHandler(NotFoundShortenUrlException.class) + public ResponseEntity handleNotFoundShortenUrlException(NotFoundShortenUrlException ex) { + return new ResponseEntity<>("단축 URL을 찾지 못했습니다.", HttpStatus.NOT_FOUND); + } + +} From f5caa0e5d23b4f091c332d7f7ac747ce7ffba695 Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 16:49:26 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20request,=20response=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/GetOriginUrlResponse.java | 9 +++++++++ .../presentation/ShortenUrlRequest.java | 14 ++++++++++++++ .../presentation/ShortenUrlResponse.java | 10 ++++++++++ .../presentation/UrlShortenController.java | 15 +++++++++------ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java create mode 100644 src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java create mode 100644 src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java diff --git a/src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java b/src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java new file mode 100644 index 0000000..468e3f1 --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java @@ -0,0 +1,9 @@ +package community.whatever.onembackendjava.presentation; + +public class GetOriginUrlResponse { + private String originUrl; + + public GetOriginUrlResponse(String originUrl) { + this.originUrl = originUrl; + } +} diff --git a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java b/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java new file mode 100644 index 0000000..d78fb15 --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java @@ -0,0 +1,14 @@ +package community.whatever.onembackendjava.presentation; + +public class ShortenUrlRequest { + private String originUrl; + + public ShortenUrlRequest(String originUrl) { + this.originUrl = originUrl; + } + + public String getOriginUrl() { + return originUrl; + } + +} diff --git a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java b/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java new file mode 100644 index 0000000..8ce1c9d --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java @@ -0,0 +1,10 @@ +package community.whatever.onembackendjava.presentation; + +public class ShortenUrlResponse { + + private String shortenUrlKey; + + public ShortenUrlResponse(String shortenUrlKey) { + this.shortenUrlKey = shortenUrlKey; + } +} diff --git a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java b/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java index a9a70c4..234553d 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java +++ b/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java @@ -16,13 +16,16 @@ public UrlShortenController(UrlShortenService urlShortenService) { this.urlShortenService = urlShortenService; } - @GetMapping("/shorten-url/{shortenUrlKey}") - public String getOriginUrlByShortenUrlKey(@PathVariable String shortenUrlKey) { - return urlShortenService.getOriginUrlByShortenUrlKey(shortenUrlKey); + @PostMapping("/shorten-url") + public ShortenUrlResponse createShortenUrl(@RequestBody ShortenUrlRequest request) { + String shortenUrl = urlShortenService.createShortenUrl(request.getOriginUrl()); + return new ShortenUrlResponse(shortenUrl); } - @PostMapping("/shorten-url") - public String createShortenUrl(@RequestBody String originUrl) { - return urlShortenService.createShortenUrl(originUrl); + @GetMapping("/shorten-url/{shortenUrlKey}") + public GetOriginUrlResponse getOriginUrlByShortenUrlKey(@PathVariable String shortenUrlKey) { + String originUrl = urlShortenService.getOriginUrlByShortenUrlKey(shortenUrlKey); + return new GetOriginUrlResponse(originUrl); } + } From 531f9648af6cfe1cd7ffc22d352bdc76cfcb8145 Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 16:54:05 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception}/GlobalExceptionHandler.java | 4 ++-- .../exception/notfound}/NotFoundShortenUrlException.java | 2 +- .../{presentation => controller}/UrlShortenController.java | 7 +++++-- .../request}/ShortenUrlRequest.java | 2 +- .../response}/GetOriginUrlResponse.java | 2 +- .../response}/ShortenUrlResponse.java | 2 +- .../UrlShortenRepository.java | 2 +- .../{application => service}/UrlShortenService.java | 7 +++---- .../onembackendjava/application/UrlShortenServiceTest.java | 2 +- 9 files changed, 16 insertions(+), 14 deletions(-) rename src/main/java/community/whatever/onembackendjava/{presentation => common/exception}/GlobalExceptionHandler.java (77%) rename src/main/java/community/whatever/onembackendjava/{domain => common/exception/notfound}/NotFoundShortenUrlException.java (51%) rename src/main/java/community/whatever/onembackendjava/{presentation => controller}/UrlShortenController.java (74%) rename src/main/java/community/whatever/onembackendjava/{presentation => controller/request}/ShortenUrlRequest.java (78%) rename src/main/java/community/whatever/onembackendjava/{presentation => controller/response}/GetOriginUrlResponse.java (71%) rename src/main/java/community/whatever/onembackendjava/{presentation => controller/response}/ShortenUrlResponse.java (73%) rename src/main/java/community/whatever/onembackendjava/{infrastructure => repository}/UrlShortenRepository.java (89%) rename src/main/java/community/whatever/onembackendjava/{application => service}/UrlShortenService.java (77%) diff --git a/src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java b/src/main/java/community/whatever/onembackendjava/common/exception/GlobalExceptionHandler.java similarity index 77% rename from src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java rename to src/main/java/community/whatever/onembackendjava/common/exception/GlobalExceptionHandler.java index 038f4f6..d8aa0e3 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/GlobalExceptionHandler.java +++ b/src/main/java/community/whatever/onembackendjava/common/exception/GlobalExceptionHandler.java @@ -1,6 +1,6 @@ -package community.whatever.onembackendjava.presentation; +package community.whatever.onembackendjava.common.exception; -import community.whatever.onembackendjava.domain.NotFoundShortenUrlException; +import community.whatever.onembackendjava.common.exception.notfound.NotFoundShortenUrlException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; diff --git a/src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java b/src/main/java/community/whatever/onembackendjava/common/exception/notfound/NotFoundShortenUrlException.java similarity index 51% rename from src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java rename to src/main/java/community/whatever/onembackendjava/common/exception/notfound/NotFoundShortenUrlException.java index b61e221..8f23e39 100644 --- a/src/main/java/community/whatever/onembackendjava/domain/NotFoundShortenUrlException.java +++ b/src/main/java/community/whatever/onembackendjava/common/exception/notfound/NotFoundShortenUrlException.java @@ -1,4 +1,4 @@ -package community.whatever.onembackendjava.domain; +package community.whatever.onembackendjava.common.exception.notfound; public class NotFoundShortenUrlException extends RuntimeException { diff --git a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java b/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java similarity index 74% rename from src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java rename to src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java index 234553d..c34d247 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/UrlShortenController.java +++ b/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java @@ -1,6 +1,9 @@ -package community.whatever.onembackendjava.presentation; +package community.whatever.onembackendjava.controller; -import community.whatever.onembackendjava.application.UrlShortenService; +import community.whatever.onembackendjava.controller.response.GetOriginUrlResponse; +import community.whatever.onembackendjava.controller.request.ShortenUrlRequest; +import community.whatever.onembackendjava.controller.response.ShortenUrlResponse; +import community.whatever.onembackendjava.service.UrlShortenService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; diff --git a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java b/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java similarity index 78% rename from src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java rename to src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java index d78fb15..942577a 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlRequest.java +++ b/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java @@ -1,4 +1,4 @@ -package community.whatever.onembackendjava.presentation; +package community.whatever.onembackendjava.controller.request; public class ShortenUrlRequest { private String originUrl; diff --git a/src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java b/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java similarity index 71% rename from src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java rename to src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java index 468e3f1..32e12a6 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/GetOriginUrlResponse.java +++ b/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java @@ -1,4 +1,4 @@ -package community.whatever.onembackendjava.presentation; +package community.whatever.onembackendjava.controller.response; public class GetOriginUrlResponse { private String originUrl; diff --git a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java b/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java similarity index 73% rename from src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java rename to src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java index 8ce1c9d..d0adc2d 100644 --- a/src/main/java/community/whatever/onembackendjava/presentation/ShortenUrlResponse.java +++ b/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java @@ -1,4 +1,4 @@ -package community.whatever.onembackendjava.presentation; +package community.whatever.onembackendjava.controller.response; public class ShortenUrlResponse { diff --git a/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java b/src/main/java/community/whatever/onembackendjava/repository/UrlShortenRepository.java similarity index 89% rename from src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java rename to src/main/java/community/whatever/onembackendjava/repository/UrlShortenRepository.java index 9078e3e..bdd8be2 100644 --- a/src/main/java/community/whatever/onembackendjava/infrastructure/UrlShortenRepository.java +++ b/src/main/java/community/whatever/onembackendjava/repository/UrlShortenRepository.java @@ -1,4 +1,4 @@ -package community.whatever.onembackendjava.infrastructure; +package community.whatever.onembackendjava.repository; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java similarity index 77% rename from src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java rename to src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java index d24addb..dccc8a8 100644 --- a/src/main/java/community/whatever/onembackendjava/application/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java @@ -1,8 +1,7 @@ -package community.whatever.onembackendjava.application; +package community.whatever.onembackendjava.service; -import community.whatever.onembackendjava.domain.NotFoundShortenUrlException; -import community.whatever.onembackendjava.infrastructure.UrlShortenRepository; -import java.util.NoSuchElementException; +import community.whatever.onembackendjava.common.exception.notfound.NotFoundShortenUrlException; +import community.whatever.onembackendjava.repository.UrlShortenRepository; import java.util.Random; import org.springframework.stereotype.Service; diff --git a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java index 32ebf1b..a08c592 100644 --- a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java +++ b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java @@ -3,8 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import community.whatever.onembackendjava.service.UrlShortenService; import java.util.NoSuchElementException; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; From 23a6c58e2e5780b10e0ee05a8a0953bbf7de5123 Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 17:06:32 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20UrlShortener=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EB=A1=9C=20URL=20=EB=8B=A8=EC=B6=95=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/UrlShortener.java | 15 +++++++++++++++ .../service/UrlShortenService.java | 19 ++++++++----------- 2 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 src/main/java/community/whatever/onembackendjava/component/UrlShortener.java diff --git a/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java new file mode 100644 index 0000000..0d0196f --- /dev/null +++ b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java @@ -0,0 +1,15 @@ +package community.whatever.onembackendjava.component; + +import java.util.Random; +import org.springframework.stereotype.Component; + +@Component +public class UrlShortener { + + private static final Random RANDOM = new Random(); + + public String shorten() { + return String.valueOf(RANDOM.nextInt(10000)); + } + +} diff --git a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java index dccc8a8..4349381 100644 --- a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java @@ -1,6 +1,7 @@ package community.whatever.onembackendjava.service; import community.whatever.onembackendjava.common.exception.notfound.NotFoundShortenUrlException; +import community.whatever.onembackendjava.component.UrlShortener; import community.whatever.onembackendjava.repository.UrlShortenRepository; import java.util.Random; import org.springframework.stereotype.Service; @@ -9,26 +10,22 @@ public class UrlShortenService { private final UrlShortenRepository urlShortenRepository; + private final UrlShortener urlShortener; - private static final Random RANDOM = new Random(); - - public UrlShortenService(UrlShortenRepository urlShortenRepository) { + public UrlShortenService(UrlShortenRepository urlShortenRepository, UrlShortener urlShortener) { this.urlShortenRepository = urlShortenRepository; - } - - public String getOriginUrlByShortenUrlKey(String shortenUrlKey) { - return urlShortenRepository.findByShortenUrlKey(shortenUrlKey) - .orElseThrow(NotFoundShortenUrlException::new); + this.urlShortener = urlShortener; } public String createShortenUrl(String originUrl) { - String shortenUrlKey = generateKey(); + String shortenUrlKey = urlShortener.shorten(); urlShortenRepository.save(shortenUrlKey, originUrl); return shortenUrlKey; } - private String generateKey() { - return String.valueOf(RANDOM.nextInt(10000)); + public String getOriginUrlByShortenUrlKey(String shortenUrlKey) { + return urlShortenRepository.findByShortenUrlKey(shortenUrlKey) + .orElseThrow(NotFoundShortenUrlException::new); } } From 7b74a987d792dee29591130e2e05ccb19e6f8ccd Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Fri, 31 Jan 2025 17:08:05 +0900 Subject: [PATCH 6/9] =?UTF-8?q?NotFoundShortenUrlException=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onembackendjava/application/UrlShortenServiceTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java index a08c592..af16c1b 100644 --- a/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java +++ b/src/test/java/community/whatever/onembackendjava/application/UrlShortenServiceTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import community.whatever.onembackendjava.common.exception.notfound.NotFoundShortenUrlException; import community.whatever.onembackendjava.service.UrlShortenService; import java.util.NoSuchElementException; import org.junit.jupiter.api.Test; @@ -25,10 +26,10 @@ class UrlShortenServiceTest { } @Test - void 존재하지_않는_key로_조회하면_예외가_발생한다() { + void 존재하지_않는_shorten_url_key로_조회하면_예외가_발생한다() { String nonExistingKey = "nonExistingKey"; - assertThrows(NoSuchElementException.class, () -> { + assertThrows(NotFoundShortenUrlException.class, () -> { urlShortenService.getOriginUrlByShortenUrlKey(nonExistingKey); }); } From 0ddcc2e3dcfc6d6820af42b981b96486a86c6269 Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Sun, 2 Feb 2025 02:12:28 +0900 Subject: [PATCH 7/9] =?UTF-8?q?rafactor:=20dto=EB=A5=BC=20record=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UrlShortenController.java | 2 +- .../controller/request/ShortenUrlRequest.java | 13 +++---------- .../controller/response/GetOriginUrlResponse.java | 9 +++------ .../controller/response/ShortenUrlResponse.java | 10 +++------- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java b/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java index c34d247..7df4a37 100644 --- a/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java +++ b/src/main/java/community/whatever/onembackendjava/controller/UrlShortenController.java @@ -21,7 +21,7 @@ public UrlShortenController(UrlShortenService urlShortenService) { @PostMapping("/shorten-url") public ShortenUrlResponse createShortenUrl(@RequestBody ShortenUrlRequest request) { - String shortenUrl = urlShortenService.createShortenUrl(request.getOriginUrl()); + String shortenUrl = urlShortenService.createShortenUrl(request.originUrl()); return new ShortenUrlResponse(shortenUrl); } diff --git a/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java b/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java index 942577a..d1dfe83 100644 --- a/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java +++ b/src/main/java/community/whatever/onembackendjava/controller/request/ShortenUrlRequest.java @@ -1,14 +1,7 @@ package community.whatever.onembackendjava.controller.request; -public class ShortenUrlRequest { - private String originUrl; - - public ShortenUrlRequest(String originUrl) { - this.originUrl = originUrl; - } - - public String getOriginUrl() { - return originUrl; - } +public record ShortenUrlRequest( + String originUrl +) { } diff --git a/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java b/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java index 32e12a6..f88b111 100644 --- a/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java +++ b/src/main/java/community/whatever/onembackendjava/controller/response/GetOriginUrlResponse.java @@ -1,9 +1,6 @@ package community.whatever.onembackendjava.controller.response; -public class GetOriginUrlResponse { - private String originUrl; - - public GetOriginUrlResponse(String originUrl) { - this.originUrl = originUrl; - } +public record GetOriginUrlResponse ( + String originUrl +){ } diff --git a/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java b/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java index d0adc2d..9148729 100644 --- a/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java +++ b/src/main/java/community/whatever/onembackendjava/controller/response/ShortenUrlResponse.java @@ -1,10 +1,6 @@ package community.whatever.onembackendjava.controller.response; -public class ShortenUrlResponse { - - private String shortenUrlKey; - - public ShortenUrlResponse(String shortenUrlKey) { - this.shortenUrlKey = shortenUrlKey; - } +public record ShortenUrlResponse ( + String shortenUrlKey +){ } From 70f9f6d8939e83af0ceee19465c019fbf258a91a Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Sun, 2 Feb 2025 02:15:05 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20UrlShortener=EC=9D=98=20?= =?UTF-8?q?=EB=B9=88=20=EB=93=B1=EB=A1=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../whatever/onembackendjava/component/UrlShortener.java | 1 - .../whatever/onembackendjava/service/UrlShortenService.java | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java index 0d0196f..09dcf94 100644 --- a/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java +++ b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java @@ -3,7 +3,6 @@ import java.util.Random; import org.springframework.stereotype.Component; -@Component public class UrlShortener { private static final Random RANDOM = new Random(); diff --git a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java index 4349381..c8eaf06 100644 --- a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java @@ -3,7 +3,6 @@ import community.whatever.onembackendjava.common.exception.notfound.NotFoundShortenUrlException; import community.whatever.onembackendjava.component.UrlShortener; import community.whatever.onembackendjava.repository.UrlShortenRepository; -import java.util.Random; import org.springframework.stereotype.Service; @Service @@ -12,9 +11,9 @@ public class UrlShortenService { private final UrlShortenRepository urlShortenRepository; private final UrlShortener urlShortener; - public UrlShortenService(UrlShortenRepository urlShortenRepository, UrlShortener urlShortener) { + public UrlShortenService(UrlShortenRepository urlShortenRepository) { this.urlShortenRepository = urlShortenRepository; - this.urlShortener = urlShortener; + this.urlShortener = new UrlShortener(); } public String createShortenUrl(String originUrl) { From 6a6637462a179241b53597bde43929fce7918e70 Mon Sep 17 00:00:00 2001 From: seeeeeeong Date: Sun, 2 Feb 2025 02:46:55 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor:=20UrlShortener=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20shorten()=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A5=BC=20static=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../whatever/onembackendjava/component/UrlShortener.java | 2 +- .../whatever/onembackendjava/service/UrlShortenService.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java index 09dcf94..a0b76f8 100644 --- a/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java +++ b/src/main/java/community/whatever/onembackendjava/component/UrlShortener.java @@ -7,7 +7,7 @@ public class UrlShortener { private static final Random RANDOM = new Random(); - public String shorten() { + public static String shorten() { return String.valueOf(RANDOM.nextInt(10000)); } diff --git a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java index c8eaf06..f7b7341 100644 --- a/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java +++ b/src/main/java/community/whatever/onembackendjava/service/UrlShortenService.java @@ -9,15 +9,13 @@ public class UrlShortenService { private final UrlShortenRepository urlShortenRepository; - private final UrlShortener urlShortener; public UrlShortenService(UrlShortenRepository urlShortenRepository) { this.urlShortenRepository = urlShortenRepository; - this.urlShortener = new UrlShortener(); } public String createShortenUrl(String originUrl) { - String shortenUrlKey = urlShortener.shorten(); + String shortenUrlKey = UrlShortener.shorten(); urlShortenRepository.save(shortenUrlKey, originUrl); return shortenUrlKey; }