diff --git a/src/main/java/org/sopt/confeti/global/resolver/artist/ArtistResolver.java b/src/main/java/org/sopt/confeti/global/resolver/artist/ArtistResolver.java index b004319..08fa64e 100644 --- a/src/main/java/org/sopt/confeti/global/resolver/artist/ArtistResolver.java +++ b/src/main/java/org/sopt/confeti/global/resolver/artist/ArtistResolver.java @@ -1,6 +1,5 @@ package org.sopt.confeti.global.resolver.artist; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Queue; @@ -20,42 +19,56 @@ public class ArtistResolver { private final ArtistStrategyRegistry artistStrategyRegistry; // Spotify API를 사용해 아티스트를 로드하는 엔트리 포인트 - public void load(final Object target) { + public void load(final T target) { final HashMap> artistMapper = new HashMap<>(); - collect(artistMapper, target, artistStrategyRegistry.getArtistStrategyByClass(target.getClass())); + collect(artistMapper, target); List confetiArtists = searchByArtistIds(artistMapper.keySet()); injection(artistMapper, confetiArtists); } - private void collect( + private void collect( final HashMap> artistMapper, - final Object target, - final ArtistStrategy artistStrategy + final T target ) { - if (target == null) { + if (isListType(target)) { + collectList(artistMapper, (List) target); return; } - // 주어진 타겟이 리스트일 경우 - if (isListType(target)) { - List targets = (List) target; + collectSingle(artistMapper, target); + } + + private void collectList( + final HashMap> artistMapper, + final List targets + ) { + if (targets.isEmpty()) { + throw new ConfetiException(ErrorMessage.BAD_REQUEST); + } - targets.forEach(loadTarget -> { - // Mapper에 등록된 클래스 타입인 경우 - artistStrategy.collect(artistMapper, loadTarget); - }); + ArtistStrategy artistStrategy = artistStrategyRegistry.getArtistStrategyByClass(targets.getFirst().getClass()); + targets.forEach(target -> { + artistStrategy.collect(artistMapper, target); + }); + } - return; + private void collectSingle( + final HashMap> artistMapper, + final T target + ) { + if (target == null) { + throw new ConfetiException(ErrorMessage.BAD_REQUEST); } - // Mapper에 등록된 클래스 타입인 경우 + + ArtistStrategy artistStrategy = artistStrategyRegistry.getArtistStrategyByClass(target.getClass()); artistStrategy.collect(artistMapper, target); } - private boolean isListType(final Object target) { - return target.getClass() == ArrayList.class; + private boolean isListType(final T target) { + return target instanceof List; } private void injection(