Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat [#216] 하나의 아티스트 아이디 값이 여러 개의 객체에 매핑될 수 있도록 수정 #217

Merged
merged 2 commits into from
Jan 24, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,21 @@

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import org.sopt.confeti.annotation.Resolver;
import org.sopt.confeti.domain.artistfavorite.ArtistFavorite;
import org.sopt.confeti.domain.concert.Concert;
import org.sopt.confeti.domain.festival.Festival;
import org.sopt.confeti.domain.festivaldate.FestivalDate;
import org.sopt.confeti.global.exception.ConfetiException;
import org.sopt.confeti.global.message.ErrorMessage;
import org.sopt.confeti.global.util.IntegrateFunction;

@Resolver
Expand Down Expand Up @@ -39,7 +44,7 @@ public class ArtistResolver {
}};

private List<String> artistIds;
private HashMap<String, ConfetiArtist> artistMapper;
private HashMap<String, Queue<ConfetiArtist>> artistMapper;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이렇게 자료 구조를 알차게 써먹을 수 있다니..... 많이 배우고 갑니다


private final SpotifyAPIHandler spotifyAPIHandler;

Expand Down Expand Up @@ -97,17 +102,14 @@ private void collectArtistFavorite(final Object target) {
ArtistFavorite artistFavorite = (ArtistFavorite) target;
ConfetiArtist confetiArtist = artistFavorite.getArtist();
artistIds.add(confetiArtist.getArtistId());
artistMapper.put(confetiArtist.getArtistId(), artistFavorite.getArtist());
addArtistToMapper(confetiArtist.getArtistId(), artistFavorite.getArtist());
}

private void collectConcert(final Object target) {
Concert concert = (Concert) target;
concert.getArtists().forEach(artist -> {
artistIds.add(artist.getArtist().getArtistId());
artistMapper.put(
artist.getArtist().getArtistId(),
artist.getArtist()
);
addArtistToMapper(artist.getArtist().getArtistId(), artist.getArtist());
});
}

Expand All @@ -119,7 +121,7 @@ private void collectFestival(final Object target) {
.flatMap(time -> time.getArtists().stream())
.forEach(artist -> {
artistIds.add(artist.getArtist().getArtistId());
artistMapper.put(artist.getArtist().getArtistId(), artist.getArtist());
addArtistToMapper(artist.getArtist().getArtistId(), artist.getArtist());
});
}

Expand All @@ -130,13 +132,18 @@ private void collectFestivalDate(final Object target) {
.flatMap(time -> time.getArtists().stream())
.forEach(artist -> {
artistIds.add(artist.getArtist().getArtistId());
artistMapper.put(artist.getArtist().getArtistId(), artist.getArtist());
addArtistToMapper(artist.getArtist().getArtistId(), artist.getArtist());
});
}

private void injection(final List<ConfetiArtist> confetiArtists) {
confetiArtists.forEach((confetiArtist -> {
ConfetiArtist mappedConfetiArtist = artistMapper.get(confetiArtist.getArtistId());
ConfetiArtist mappedConfetiArtist = artistMapper.get(confetiArtist.getArtistId()).poll();

if (mappedConfetiArtist == null) {
throw new ConfetiException(ErrorMessage.INTERNAL_SERVER_ERROR);
}

mappedConfetiArtist.setName(confetiArtist.getName());
mappedConfetiArtist.setProfileUrl(confetiArtist.getProfileUrl());
}));
Expand All @@ -145,4 +152,16 @@ private void injection(final List<ConfetiArtist> confetiArtists) {
private List<ConfetiArtist> searchByArtistIds(final List<String> artistIds) {
return spotifyAPIHandler.findArtistsByArtistIdsEntry(artistIds);
}

private void addArtistToMapper(final String artistId, final ConfetiArtist artist) {
if (!artistMapper.containsKey(artistId)) {
createQueueToMapper(artistId);
}

artistMapper.get(artistId).add(artist);
}

private void createQueueToMapper(final String artistId) {
artistMapper.put(artistId, new LinkedList<>());
}
}