From 7ea75d07d44542a68a43bdd6716b0517d32bd30e Mon Sep 17 00:00:00 2001
From: SoobinHwang <rorngk22@ajou.ac.kr>
Date: Mon, 17 Jul 2023 17:20:52 +0900
Subject: [PATCH] code refactoring with service

---
 .../controller/MyWebController.java           |  66 +++---------------
 .../myspringweb/service/MusicService.java     |  60 ++++++++++++++++
 .../controller/MyWebController.class          | Bin 3673 -> 1914 bytes
 .../myspringweb/service/MusicService.class    | Bin 0 -> 2879 bytes
 4 files changed, 71 insertions(+), 55 deletions(-)
 create mode 100644 src/main/java/kr/ajousw/myspringweb/service/MusicService.java
 create mode 100644 target/classes/kr/ajousw/myspringweb/service/MusicService.class

diff --git a/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java b/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
index 2507cfc..961d4c7 100644
--- a/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
+++ b/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
@@ -5,17 +5,12 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.RestTemplate;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import jakarta.transaction.Transactional;
 import kr.ajousw.myspringweb.dto.FavoriteMusicRequestDto;
 import kr.ajousw.myspringweb.dto.MusicList;
 import kr.ajousw.myspringweb.entity.FavoriteMusic;
-import kr.ajousw.myspringweb.repository.FavoriteRepository;
+import kr.ajousw.myspringweb.service.MusicService;
 
-import java.io.IOException;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,66 +18,27 @@ import org.springframework.web.bind.annotation.GetMapping;
 
 @RestController
 public class MyWebController {
-    // PathVariable 방식 => localhost/musicSearch/aespa 로 접속
-    @GetMapping(value = "/musicSearch/{term}")
-    public MusicList musicSearchByPath(@PathVariable String term) {
-        RestTemplate restTemplate = new RestTemplate();
+    @Autowired
+    MusicService service;
 
-        try {
-            String response = restTemplate.getForObject("https://itunes.apple.com/search?term=term&entity=album",
-                    String.class);
-            ObjectMapper mapper = new ObjectMapper();
-            MusicList list = mapper.readValue(response, MusicList.class);
-            System.out.println(list.getResultCount());
-            return list;
-        } catch (IOException e) {
-            System.out.println(e.toString());
-            return null;
-        }
+    @GetMapping(value = "/musicSearch/{name}")
+    public MusicList musicSearchByPath(@PathVariable String name) {
+        return service.searchMusic(name);
     }
 
-    // Query Param 방식 => localhost/musicSearch?term=aespa 로 접속
     @GetMapping(value = "/musicSearch")
-    public MusicList musicSearchByParam(@RequestParam String term) {
-        RestTemplate restTemplate = new RestTemplate();
-
-        try {
-            String response = restTemplate.getForObject("https://itunes.apple.com/search?term=term&entity=album",
-                    String.class);
-            ObjectMapper mapper = new ObjectMapper();
-            MusicList list = mapper.readValue(response, MusicList.class);
-            System.out.println(list.getResultCount());
-            return list;
-        } catch (IOException e) {
-            System.out.println(e.toString());
-            return null;
-        }
+    public MusicList musicSearchByParam(@RequestParam(value = "term") String name) {
+        return service.searchMusic(name);
     }
 
-    @Autowired
-    FavoriteRepository albumsRepo;
-
-    // Get Favorite Music list from Database
-    @GetMapping(value = "/likes")
+    @GetMapping(value = "/likes") // Get Favorite Music list from Database
     public List<FavoriteMusic> getLikes() {
-        try {
-            return albumsRepo.findAll();
-        } catch (Exception e) {
-            System.out.println(e.toString());
-            return null;
-        }
+        return service.getLikes();
     }
 
     @PostMapping(value = "/likes")
-    @Transactional
     public int postLikes(@RequestBody FavoriteMusicRequestDto favorite) {
-        FavoriteMusic music = albumsRepo.save(favorite.toEntity());
-        if (music != null) {
-            return 1;
-        }
-        else {
-            return 0;
-        }
+        return service.saveFavorite(favorite);
     }
 
 }
diff --git a/src/main/java/kr/ajousw/myspringweb/service/MusicService.java b/src/main/java/kr/ajousw/myspringweb/service/MusicService.java
new file mode 100644
index 0000000..322db5d
--- /dev/null
+++ b/src/main/java/kr/ajousw/myspringweb/service/MusicService.java
@@ -0,0 +1,60 @@
+package kr.ajousw.myspringweb.service;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import jakarta.transaction.Transactional;
+import kr.ajousw.myspringweb.dto.FavoriteMusicRequestDto;
+import kr.ajousw.myspringweb.dto.MusicList;
+import kr.ajousw.myspringweb.entity.FavoriteMusic;
+import kr.ajousw.myspringweb.repository.FavoriteRepository;
+import lombok.RequiredArgsConstructor;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+
+public class MusicService {
+    private final FavoriteRepository albumsRepo;
+    RestTemplate restTemplate = new RestTemplate();
+
+    public MusicList searchMusic(String term) {
+        try {
+            String response = restTemplate.getForObject("https://itunes.apple.com/search?term=term&entity=album",
+                    String.class);
+            ObjectMapper mapper = new ObjectMapper();
+            MusicList list = mapper.readValue(response, MusicList.class);
+            System.out.println(list.getResultCount());
+            return list;
+        } catch (IOException e) {
+            System.out.println(e.toString());
+            return null;
+        }
+    }
+
+    public List<FavoriteMusic> getLikes() {
+        try {
+            return albumsRepo.findAll();
+        } catch (Exception e) {
+            System.out.println(e.toString());
+            return null;
+        }
+    }
+
+    @Transactional
+    public int saveFavorite(FavoriteMusicRequestDto favorite) {
+        FavoriteMusic music = albumsRepo.save(favorite.toEntity());
+        if (music != null) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+    
+
+}
\ No newline at end of file
diff --git a/target/classes/kr/ajousw/myspringweb/controller/MyWebController.class b/target/classes/kr/ajousw/myspringweb/controller/MyWebController.class
index e3d46829fac59f27c95f09dfe65d1fa5635e88dd..8447d34a6d78877840bf1a5f5d64ecf42c601844 100644
GIT binary patch
delta 668
zcmca9^NUa5)W2Q(7#J9A8LZeDm>3xhCNE?Zn;gX`HPJzWo4q)-s4O!%m61Vb@<w)X
z5hz#Rx3oAjIT#|haaJ`WOI~7b>SRf#cu`IUMg}P!237_(E(RF}Id%qFMg}dAk<Qrk
z@-WCV2s1Kp7pEo`C1-$5Wn=&w#>gP#la*MOsGpOVm#!aNQk0pOZarCtt%#MSB(*4a
z@*K7bE|3knJPhg#8j}~Y*E5<<PGFUsoWLO`F2i8V!(hUo&&a@2oLH9XmROcwlv$EG
zIhoUW@?Fm5j3Sd;xg30L8JHND7#J8hwYD%wYHwqZ-oU`Xz{J4Ez`(%9z{tSBAjQDX
zz`!5|QN$p?Ajkj$oD2#KiVTblN(>APtc(l_3=9m649b(wbBoujFo-iSFz_%kFfynz
zFfxc1GpI3egTt19P4dLsq|Tthz|5ctcB&QwI|Bm)9|I$U2*|qnXa>e&25qpFMhqZV
zFfed{JhzQO2i<QfU>kYB{^WrAjgdi*L7#yIZm0psP^g(8kFkS{G-O}^TYw&VMr#;+
gP=iksYz1cUnKGCmg3lD}5pytU0k#<w_Ld9`0D2`}y#N3J

literal 3673
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
Y&QJ<Vcje%4s|J%b;LrmV0JRJZ0IQqPmH+?%

diff --git a/target/classes/kr/ajousw/myspringweb/service/MusicService.class b/target/classes/kr/ajousw/myspringweb/service/MusicService.class
new file mode 100644
index 0000000000000000000000000000000000000000..200877efdc163cb8766ca38b20235cd2f6ee0a11
GIT binary patch
literal 2879
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

literal 0
HcmV?d00001

-- 
GitLab