From 7f68060b294ba2348b5c2d6c0b4360832fd98463 Mon Sep 17 00:00:00 2001
From: Kim Daeun <iop2799@ajou.ac.kr>
Date: Wed, 9 Apr 2025 17:55:14 +0900
Subject: [PATCH] code refactoring with service

---
 .../myweb/controller/MyWebController.java     | 33 +++++++++--
 .../procoding/myweb/service/MusicService.java | 55 +++++++++++++++++++
 2 files changed, 82 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/com/ajou/procoding/myweb/service/MusicService.java

diff --git a/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java b/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java
index a201231..fde7261 100644
--- a/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java
+++ b/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java
@@ -15,6 +15,7 @@ import com.ajou.procoding.myweb.dto.FavoriteMusicRequestDto;
 import com.ajou.procoding.myweb.dto.MusicList;
 import com.ajou.procoding.myweb.entity.FavoriteMusic;
 import com.ajou.procoding.myweb.repository.FavoriteRepository;
+import com.ajou.procoding.myweb.service.MusicService;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import jakarta.transaction.Transactional;
@@ -26,8 +27,30 @@ public class MyWebController {
     @Autowired
     FavoriteRepository albumsRepo;
 
+    @Autowired
+    MusicService service;
     
-    @GetMapping(value="/musicSearch/{term}")
+    @GetMapping(value = "/musicSearch/{name}")
+    public MusicList musicSearchByPath(@PathVariable String name){
+        return service.searchMusic(name);
+    }
+
+    @GetMapping(value="/musicSearch")
+    public MusicList musicSearchByParam(@RequestParam(value="term") String name) {
+        return service.searchMusic(name);
+    }
+
+    @GetMapping(value="/likes")  //Get Favorite Music list from Database
+    public List<FavoriteMusic> getLikes() {
+        return service.getLikes();
+    }
+
+    @PostMapping(value="/likes")
+    public int postLikes(@RequestBody FavoriteMusicRequestDto favorite) {
+        return service.saveFavorite(favorite);
+    }
+
+    /*@GetMapping(value="/musicSearch/{term}")
     public MusicList musicSearchByPath(@PathVariable String term) {
         try {
             String url = String.format("https://itunes.apple.com/search?term=%s&entity=album", term);
@@ -78,13 +101,11 @@ public class MyWebController {
     FavoriteMusic music = albumsRepo.save(favorite.toEntity());
     if(music != null) {
         return 1;
-    }
+        }
     else {
         return 0;
-    }
-}
-
-    
+        }
+    }*/
 
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/ajou/procoding/myweb/service/MusicService.java b/src/main/java/com/ajou/procoding/myweb/service/MusicService.java
new file mode 100644
index 0000000..b64791a
--- /dev/null
+++ b/src/main/java/com/ajou/procoding/myweb/service/MusicService.java
@@ -0,0 +1,55 @@
+package com.ajou.procoding.myweb.service;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import com.ajou.procoding.myweb.dto.FavoriteMusicRequestDto;
+import com.ajou.procoding.myweb.dto.MusicList;
+import com.ajou.procoding.myweb.entity.FavoriteMusic;
+import com.ajou.procoding.myweb.repository.FavoriteRepository;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import jakarta.transaction.Transactional;
+import lombok.RequiredArgsConstructor;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class MusicService {
+    
+    private final FavoriteRepository albumsRepo;
+    private final RestTemplate restTemplate = new RestTemplate();
+
+
+    //iTunes API를 호출해 앨범 검색 결과(MusicList) 반환 
+    public MusicList searchMusic(String name) {
+        try {
+            String url = String.format("https://itunes.apple.com/search?term=%s&entity=album", name);
+            String response = restTemplate.getForObject(url, String.class);
+            ObjectMapper mapper = new ObjectMapper();
+            MusicList list = mapper.readValue(response, MusicList.class);
+            System.out.println("ResultCount: " + list.getResultCount());
+            return list;
+        } catch (IOException e) {
+            System.out.println(e.toString());
+            return null;
+        }
+    }
+
+    
+    //DB에서 FavoriteMusic 목록을 조회 
+    public List<FavoriteMusic> getLikes() {
+        return albumsRepo.findAll();
+    }
+
+    
+     //즐겨찾기 등록
+     //DTO -> 엔티티 변환 후 DB에 저장, 성공 시 1, 실패 시 0 반환
+    public int saveFavorite(FavoriteMusicRequestDto favorite) {
+        FavoriteMusic music = albumsRepo.save(favorite.toEntity());
+        return (music != null) ? 1 : 0;
+    }
+}
\ No newline at end of file
-- 
GitLab