From a5f7b87a0f427daa5c035007d8dcf34996080d8c Mon Sep 17 00:00:00 2001
From: JangMH <dnsfl1517@ajou.ac.kr>
Date: Wed, 9 Apr 2025 17:59:19 +0900
Subject: [PATCH] code refactoring with service

---
 .../myweb/controller/MyWebController.java     | 85 ++++++-------------
 .../myweb/dto/FavoriteMusicRequestDto.java    | 15 ++--
 .../{entitiy => entity}/FavoriteMusic.java    |  2 +-
 .../myweb/repository/FavoriteRepository.java  |  2 +-
 .../procoding/myweb/service/MusicService.java | 48 +++++++++++
 5 files changed, 83 insertions(+), 69 deletions(-)
 rename src/main/java/com/ajou/procoding/myweb/{entitiy => entity}/FavoriteMusic.java (93%)
 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 4d60be3..f7eb4ca 100644
--- a/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java
+++ b/src/main/java/com/ajou/procoding/myweb/controller/MyWebController.java
@@ -1,89 +1,54 @@
 package com.ajou.procoding.myweb.controller;
 
-import java.io.IOException;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 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.ajou.procoding.myweb.dto.FavoriteMusicRequestDto;
 import com.ajou.procoding.myweb.dto.MusicList;
-import com.ajou.procoding.myweb.entitiy.FavoriteMusic;
+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;
 
-@RestController
-
-public class MyWebController {
-
-    @GetMapping(value="/musicSearch/{term}")
-    public MusicList musicSearchByPath(@PathVariable String term) {
-        RestTemplate restTemplate = new RestTemplate();
-        String url = String.format("https://itunes.apple.com/search?term=%s&entity=album", term);
-        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;
-        }
-    }
-
+import java.io.IOException;
+import java.util.List;
 
-    @GetMapping(value="/musicSearch")
-    public MusicList musicSearchByParam(@RequestParam String term) { 
-        RestTemplate restTemplate = new RestTemplate();
-        String url = String.format("https://itunes.apple.com/search?term=%s&entity=album", term);
-        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;
-        }}
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
-        @Autowired
-        FavoriteRepository albumsRepo;
+@RestController
+public class MyWebController {
 
 
-        @GetMapping(value="/likes") 
-        public List<FavoriteMusic> getLikes() {
+    @Autowired
+    MusicService service;
 
-        try {
-            return albumsRepo.findAll();
+    @GetMapping(value = "/musicSearch/{name}")
+    public MusicList musicSearchByPath(@PathVariable String name) {
+        return service.searchMusic(name);
+    }
 
-        } catch (Exception e) {
-            System.out.println(e.toString());
-            return null;
-        }
+    @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")
-    @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/com/ajou/procoding/myweb/dto/FavoriteMusicRequestDto.java b/src/main/java/com/ajou/procoding/myweb/dto/FavoriteMusicRequestDto.java
index 73df8bc..79ae88f 100644
--- a/src/main/java/com/ajou/procoding/myweb/dto/FavoriteMusicRequestDto.java
+++ b/src/main/java/com/ajou/procoding/myweb/dto/FavoriteMusicRequestDto.java
@@ -1,6 +1,6 @@
 package com.ajou.procoding.myweb.dto;
 
-import com.ajou.procoding.myweb.entitiy.FavoriteMusic;
+import com.ajou.procoding.myweb.entity.FavoriteMusic;
 
 import jakarta.persistence.Column;
 import lombok.Getter;
@@ -22,12 +22,13 @@ public class FavoriteMusicRequestDto {
     public FavoriteMusic toEntity() {
         FavoriteMusic music = new FavoriteMusic();
         music.setCollectionId(this.collectionId);
-        music.setCollectionId(this.collectionType);
-        music.setCollectionId(this.artistId);
-        music.setCollectionId(this.artistName);
-        music.setCollectionId(this.artistViewUrl);
-        music.setCollectionId(this.collectionName);
-        music.setCollectionId(this.collectionViewUrl);
+        music.setCollectionType(this.collectionType);
+        music.setArtistId(this.artistId);
+        music.setArtistName(this.artistName);
+        music.setCollectionName(this.collectionName);
+        music.setArtistViewUrl(this.artistViewUrl);
+        music.setCollectionViewUrl(this.collectionViewUrl);
+
 
         return music;
     }
diff --git a/src/main/java/com/ajou/procoding/myweb/entitiy/FavoriteMusic.java b/src/main/java/com/ajou/procoding/myweb/entity/FavoriteMusic.java
similarity index 93%
rename from src/main/java/com/ajou/procoding/myweb/entitiy/FavoriteMusic.java
rename to src/main/java/com/ajou/procoding/myweb/entity/FavoriteMusic.java
index eb5a28a..5c5167f 100644
--- a/src/main/java/com/ajou/procoding/myweb/entitiy/FavoriteMusic.java
+++ b/src/main/java/com/ajou/procoding/myweb/entity/FavoriteMusic.java
@@ -1,4 +1,4 @@
-package com.ajou.procoding.myweb.entitiy;
+package com.ajou.procoding.myweb.entity;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
diff --git a/src/main/java/com/ajou/procoding/myweb/repository/FavoriteRepository.java b/src/main/java/com/ajou/procoding/myweb/repository/FavoriteRepository.java
index 04fac82..4e9f4a8 100644
--- a/src/main/java/com/ajou/procoding/myweb/repository/FavoriteRepository.java
+++ b/src/main/java/com/ajou/procoding/myweb/repository/FavoriteRepository.java
@@ -4,7 +4,7 @@ import java.util.List;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import com.ajou.procoding.myweb.entitiy.FavoriteMusic;
+import com.ajou.procoding.myweb.entity.FavoriteMusic;
 
 public interface FavoriteRepository extends 	
             JpaRepository<FavoriteMusic, String> {
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..ef2e6cf
--- /dev/null
+++ b/src/main/java/com/ajou/procoding/myweb/service/MusicService.java
@@ -0,0 +1,48 @@
+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;
+    RestTemplate restTemplate = new RestTemplate();
+
+    public MusicList searchMusic(String name) {
+        String url = String.format("https://itunes.apple.com/search?term=%s&entity=album", name);
+
+        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() {
+        return albumsRepo.findAll();
+    }
+
+    public int saveFavorite(FavoriteMusicRequestDto favorite) {
+        FavoriteMusic music = albumsRepo.save(favorite.toEntity());
+        return music != null ? 1 : 0;
+    }
+}
\ No newline at end of file
-- 
GitLab