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