Skip to content

Commit

Permalink
fix [#229] 리스트 타입 여부, 아티스트 전략 조회 collect 내부로 이동 및 타겟 타입 제네릭으로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
ch1hyun committed Feb 17, 2025
1 parent 2e68731 commit 1b7f478
Showing 1 changed file with 31 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -20,42 +19,56 @@ public class ArtistResolver {
private final ArtistStrategyRegistry artistStrategyRegistry;

// Spotify API를 사용해 아티스트를 로드하는 엔트리 포인트
public void load(final Object target) {
public <T> void load(final T target) {
final HashMap<String, Queue<ConfetiArtist>> artistMapper = new HashMap<>();

collect(artistMapper, target, artistStrategyRegistry.getArtistStrategyByClass(target.getClass()));
collect(artistMapper, target);

List<ConfetiArtist> confetiArtists = searchByArtistIds(artistMapper.keySet());

injection(artistMapper, confetiArtists);
}

private void collect(
private <T> void collect(
final HashMap<String, Queue<ConfetiArtist>> 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<Object> targets = (List<Object>) target;
collectSingle(artistMapper, target);
}

private <T> void collectList(
final HashMap<String, Queue<ConfetiArtist>> artistMapper,
final List<T> 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 <T> void collectSingle(
final HashMap<String, Queue<ConfetiArtist>> 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 <T> boolean isListType(final T target) {
return target instanceof List<?>;
}

private void injection(
Expand Down

0 comments on commit 1b7f478

Please sign in to comment.