Class SpotifyService

java.lang.Object
org.localify.data.SpotifyService

@Service public class SpotifyService extends Object
Service for interacting with the Spotify API.
  • Field Details

    • executor

      public static final ThreadPoolExecutor executor
      The thread pool executor for running Spotify API calls.
    • semaphore

      public static final Semaphore semaphore
      A semaphore for limiting the number of concurrent Spotify API calls.
  • Constructor Details

    • SpotifyService

      public SpotifyService(GenreRepository genreRepository, ArtistGenreRepository artistGenreRepository, SongRepository songRepository, ArtistSongRepository artistSongRepository, UserRepository userRepository, UserSeedRepository userSeedRepository, ArtistChangeRepository artistChangeRepository, UserTopArtistsSnapshotRepository userTopArtistsSnapshotRepository, UserTopArtistsSnapshotEntryRepository userTopArtistsSnapshotEntryRepository, PlaylistSongPairRepository playlistSongPairRepository, PlaylistRepository playlistRepository, UserCityRepository userCityRepository)
      Constructs a new SpotifyService.
      Parameters:
      genreRepository - The genre repository.
      artistGenreRepository - The artist-genre repository.
      songRepository - The song repository.
      artistSongRepository - The artist-song repository.
      userRepository - The user repository.
      userSeedRepository - The user seed repository.
      artistChangeRepository - The artist change repository.
      userTopArtistsSnapshotRepository - The user top artists snapshot repository.
      userTopArtistsSnapshotEntryRepository - The user top artists snapshot entry repository.
      playlistSongPairRepository - The playlist-song pair repository.
      playlistRepository - The playlist repository.
      userCityRepository - The user-city repository.
  • Method Details

    • refreshUserCreds

      public void refreshUserCreds(User ur)
      Refreshes a user's Spotify credentials.
      Parameters:
      ur - The user to refresh credentials for.
    • getBySpotifyId

      public se.michaelthelin.spotify.model_objects.specification.Artist getBySpotifyId(String id)
      Gets an artist by their Spotify ID.
      Parameters:
      id - The Spotify ID.
      Returns:
      The artist.
    • getTopTracksBySpotifyId

      public List<se.michaelthelin.spotify.model_objects.specification.Track> getTopTracksBySpotifyId(String id, com.neovisionaries.i18n.CountryCode countryCode)
      Gets an artist's top tracks by their Spotify ID.
      Parameters:
      id - The Spotify ID.
      countryCode - The country code.
      Returns:
      A list of tracks.
    • addArtistGenres

      @Transactional public void addArtistGenres(Artist artist, String[] genres)
      Adds genres to an artist.
      Parameters:
      artist - The artist.
      genres - The genres to add.
    • updateArtist

      @Transactional public void updateArtist(UUID artistId)
      Update an artist already in spotify.
      Parameters:
      artistId - the artist's id
    • bulkUpdateArtists

      public void bulkUpdateArtists(List<Artist> artists)
      Update a list of artists already in spotify in bulk.
      Parameters:
      artists - the list of artists (limit 50)
    • updateArtistTracks

      public void updateArtistTracks(Artist ar)
      Updates an artist's top tracks.
      Parameters:
      ar - The artist to update.
    • getIsrc

      public String getIsrc(se.michaelthelin.spotify.model_objects.specification.Track track)
      Gets the ISRC for a track.
      Parameters:
      track - The track.
      Returns:
      The ISRC.
    • updateSong

      public void updateSong(Song song, se.michaelthelin.spotify.model_objects.specification.Track track)
      Updates a song with data from a Spotify track.
      Parameters:
      song - The song to update.
      track - The Spotify track.
    • findOrCreateSong

      @Transactional public Song findOrCreateSong(se.michaelthelin.spotify.model_objects.specification.Track track)
      Finds or creates a song from a Spotify track.
      Parameters:
      track - The Spotify track.
      Returns:
      The found or created song.
    • saveSongs

      public void saveSongs(Artist artist, List<Song> songs)
      Saves a list of songs for an artist.
      Parameters:
      artist - The artist.
      songs - The list of songs.
    • getOrCreateGenreByName

      public Genre getOrCreateGenreByName(String name)
      Gets or creates a genre by name.
      Parameters:
      name - The name of the genre.
      Returns:
      The genre.
    • getLargestImage

      public static String getLargestImage(se.michaelthelin.spotify.model_objects.specification.Image[] images)
      Gets the URL of the largest image from an array of images.
      Parameters:
      images - The array of images.
      Returns:
      The URL of the largest image.
    • getUserSeedsForFrame

      @Transactional public void getUserSeedsForFrame(String timeFrame, User ur, int limit)
      Gets a user's top artists for a given time frame.
      Parameters:
      timeFrame - The time frame (e.g., "long_term", "medium_term", "short_term").
      ur - The user.
      limit - The maximum number of artists to return.
    • updateUserTopArtists

      @Transactional public void updateUserTopArtists(UUID userId)
      Updates a user's top artists.
      Parameters:
      userId - The ID of the user.
    • updateUserSeed

      @Transactional public void updateUserSeed(User ur, Artist ar)
      Updates a user's seed artists.
      Parameters:
      ur - The user.
      ar - The artist.
    • updateTopArtistsSnapshotAndEntry

      @Transactional public void updateTopArtistsSnapshotAndEntry(User ur, Artist ar)
      Updates a user's top artists snapshot.
      Parameters:
      ur - The user.
      ar - The artist.
    • createArtistById

      public Artist createArtistById(String spotifyId)
      Creates an artist from a Spotify ID.
      Parameters:
      spotifyId - The Spotify ID.
      Returns:
      The created artist.
    • createArtistsByIds

      public List<Artist> createArtistsByIds(List<String> spotifyIds)
      Creates a list of artists from a list of Spotify IDs.
      Parameters:
      spotifyIds - The list of Spotify IDs.
      Returns:
      The list of created artists.
    • createArtistsByTrackIds

      public List<Artist> createArtistsByTrackIds(List<String> spotifyTrackIds)
      Creates a list of artists from a list of Spotify track IDs.
      Parameters:
      spotifyTrackIds - The list of Spotify track IDs.
      Returns:
      The list of created artists.
    • createArtistsByAlbumIds

      public List<Artist> createArtistsByAlbumIds(List<String> spotifyAlbumIds)
      Creates a list of artists from a list of Spotify album IDs.
      Parameters:
      spotifyAlbumIds - The list of Spotify album IDs.
      Returns:
      The list of created artists.
    • findAndCreateSpotifyIdsByName

      @Transactional public List<Artist> findAndCreateSpotifyIdsByName(String name)
      Finds and creates a list of artists from a name.
      Parameters:
      name - The name of the artist.
      Returns:
      The list of found or created artists.
    • getAnalysisForTrack

      public se.michaelthelin.spotify.model_objects.miscellaneous.AudioAnalysis getAnalysisForTrack(String spotifyId)
      Gets the audio analysis for a track.
      Parameters:
      spotifyId - The Spotify ID of the track.
      Returns:
      The audio analysis.
    • getFeaturesForTrack

      public se.michaelthelin.spotify.model_objects.specification.AudioFeatures getFeaturesForTrack(String spotifyId)
      Gets the audio features for a track.
      Parameters:
      spotifyId - The Spotify ID of the track.
      Returns:
      The audio features.
    • getPlaylist

      public String getPlaylist(String spotifyId)
      Gets a playlist by its Spotify ID.
      Parameters:
      spotifyId - The Spotify ID.
      Returns:
      The playlist ID, or null if not found.
    • createPlaylist

      public String createPlaylist(String name, String description)
      Creates a playlist.
      Parameters:
      name - The name of the playlist.
      description - The description of the playlist.
      Returns:
      The ID of the created playlist.
    • getOrCreatePlaylist

      public String getOrCreatePlaylist(Playlist playlist)
      Gets or creates a playlist.
      Parameters:
      playlist - The playlist.
      Returns:
      The Spotify ID of the playlist.
    • savePlaylistToSpotify

      @Transactional(propagation=REQUIRES_NEW) public void savePlaylistToSpotify(Playlist playlist, User user)
      Saves a playlist to Spotify.
      Parameters:
      playlist - The playlist to save.
      user - The user who owns the playlist.
    • saveUserPlaylistToSpotify

      @Transactional public void saveUserPlaylistToSpotify(Playlist playlist, UUID userId)
      Saves a user's playlist to Spotify.
      Parameters:
      playlist - The playlist to save.
      userId - The ID of the user.
    • makePlaylistPrivate

      public void makePlaylistPrivate(Playlist playlist, User user)
      Makes a playlist private.
      Parameters:
      playlist - The playlist.
      user - The user who owns the playlist.
    • sharePlaylist

      public void sharePlaylist(Playlist playlist, User user)
      Shares a playlist with a user.
      Parameters:
      playlist - The playlist.
      user - The user to share with.
    • flattenPlaylistToSpotifyIds

      public String[] flattenPlaylistToSpotifyIds(Playlist playlist)
      Flattens a playlist to a list of Spotify track IDs.
      Parameters:
      playlist - The playlist.
      Returns:
      An array of Spotify track IDs.
    • playlistHasSongs

      public boolean playlistHasSongs(Playlist playlist)
      Checks if a playlist has songs.
      Parameters:
      playlist - The playlist.
      Returns:
      True if the playlist has songs, false otherwise.