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