From 7db7efbc32d9ca446d6445a96e21779fd444d6ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=ED=95=9C=EC=9D=B4=EC=A7=80?= <leezy211@ajou.ac.kr>
Date: Mon, 17 Jul 2023 17:05:31 +0900
Subject: [PATCH] code refactoring with service

---
 .../controller/MyWebController.java           | 88 ++++---------------
 .../myspringweb/service/MusicService.java     | 62 +++++++++++++
 2 files changed, 79 insertions(+), 71 deletions(-)
 create mode 100644 src/main/java/kr/ajousw/myspringweb/service/MusicService.java

diff --git a/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java b/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
index 4029126..358eb1b 100644
--- a/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
+++ b/src/main/java/kr/ajousw/myspringweb/controller/MyWebController.java
@@ -9,93 +9,39 @@ 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 org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
-import com.fasterxml.jackson.databind.ObjectMapper;
 
 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;
 
 @RestController
 public class MyWebController {
-    RestTemplate restTemplate = new RestTemplate();
-
-    @GetMapping(value="/musicSearch/{term}")
-    public MusicList musicSearchByPath(@PathVariable String term) {
-        String url = "https://itunes.apple.com/search?term=" + term + "&entity=album";
-        try {
-
-            String response = restTemplate.getForObject(url, 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;
+    
+    @Autowired
+    MusicService service;
 
-        }
+    @GetMapping(value = "/musicSearch/{name}")
+    public MusicList musicSearchByPath(@PathVariable String name){
+        return service.searchMusic(name);
     }
-    @GetMapping(value="/musicSearch")
-    public MusicList musicSearchByParam(@RequestParam String term){
-        String url = "https://itunes.apple.com/search?term=" + term + "&entity=album";
-        try {
-
-        String response = restTemplate.getForObject(url, 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")
+    public MusicList musicSearchByParam(@RequestParam(value="term") String name) {
+        return service.searchMusic(name);
     }
-    @Autowired
-    FavoriteRepository albumsRepo;
 
-    @GetMapping(value="/likes")
-    public List<FavoriteMusic> getLikes() {
-        try {
-
-            return albumsRepo.findAll();
-
-        } catch (Exception e) {
-
-            System.out.println(e.toString());
-
-            return null;
-
-        }
+    @GetMapping(value="/likes") //Get Favorite Music list from Database
 
+    public List<FavoriteMusic> getLikes() {
+    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;
-        }
+    public int postLikes(@RequestBody FavoriteMusicRequestDto favorite) {
+    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..a8b1560
--- /dev/null
+++ b/src/main/java/kr/ajousw/myspringweb/service/MusicService.java
@@ -0,0 +1,62 @@
+package kr.ajousw.myspringweb.service;
+
+import java.io.IOException;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.springframework.transaction.annotation.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;
+import java.util.List;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class MusicService {
+    
+    private final FavoriteRepository albumsRepo;
+    RestTemplate restTemplate = new RestTemplate();
+
+    public MusicList searchMusic (String name){
+        String url = "https://itunes.apple.com/search?term=" + name + "&entity=album";
+        try {
+            String response = restTemplate.getForObject(url, 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;
+            }
+    }
+    public int saveFavorite(@RequestBody FavoriteMusicRequestDto favorite){
+        FavoriteMusic music = albumsRepo.save(favorite.toEntity());
+
+        if(music != null) {
+            return 1;
+        }
+        else {
+            return 0;
+        }
+    }
+}
-- 
GitLab