Skip to content

Commit

Permalink
prep for iceberg
Browse files Browse the repository at this point in the history
  • Loading branch information
th0mk committed Oct 3, 2024
1 parent 528156d commit 4db8f2c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/FMBot.Bot/Builders/ArtistBuilders.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2141,7 +2141,7 @@ public async Task<ResponseModel> AffinityAsync(
return response;
}

private string CalculateAffinityPercentage(double neighborPoints, double ownPoints, int multiplier = 2)
private static string CalculateAffinityPercentage(double neighborPoints, double ownPoints, int multiplier = 2)
{
var numberInfo = new NumberFormatInfo
{
Expand Down
1 change: 1 addition & 0 deletions src/FMBot.Bot/Models/ArtistModels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,4 @@ public ArtistSearch(ArtistInfo artist, ResponseModel response, int? randomArtist
public int? RandomArtistPosition { get; set; }
public long? RandomArtistPlaycount { get; set; }
}

7 changes: 7 additions & 0 deletions src/FMBot.Domain/Models/ArtistPopularity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace FMBot.Domain.Models;

public class ArtistPopularity
{
public string Name { get; set; }
public int Popularity { get; set; }
}
53 changes: 41 additions & 12 deletions src/FMBot.Persistence/Repositories/ArtistRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ public static async Task<ulong> AddOrReplaceUserArtistsInDatabase(IReadOnlyList<
.MapInteger("user_id", x => x.UserId)
.MapInteger("playcount", x => x.Playcount);

await using var deleteCurrentArtists = new NpgsqlCommand($"DELETE FROM public.user_artists WHERE user_id = {userId};", connection);
await using var deleteCurrentArtists =
new NpgsqlCommand($"DELETE FROM public.user_artists WHERE user_id = {userId};", connection);
await deleteCurrentArtists.ExecuteNonQueryAsync();

return await copyHelper.SaveAllAsync(connection, artists);
}

public static async Task<Artist> GetArtistForName(string artistName, NpgsqlConnection connection, bool includeGenres = false, bool includeLinks = false, bool includeImages = false)
public static async Task<Artist> GetArtistForName(string artistName, NpgsqlConnection connection,
bool includeGenres = false, bool includeLinks = false, bool includeImages = false)
{
const string getArtistQuery = "SELECT * FROM public.artists " +
"WHERE UPPER(name) = UPPER(CAST(@artistName AS CITEXT))";
Expand Down Expand Up @@ -81,7 +83,7 @@ private static async Task<ICollection<ArtistGenre>> GetArtistGenres(int artistId
private static async Task<ICollection<ArtistLink>> GetArtistLinks(int artistId, NpgsqlConnection connection)
{
const string getArtistLinkQuery = "SELECT * FROM public.artist_links " +
"WHERE artist_id = @artistId";
"WHERE artist_id = @artistId";

DefaultTypeMap.MatchNamesWithUnderscores = true;
return (await connection.QueryAsync<ArtistLink>(getArtistLinkQuery, new
Expand All @@ -93,7 +95,7 @@ private static async Task<ICollection<ArtistLink>> GetArtistLinks(int artistId,
public static async Task<ICollection<ArtistImage>> GetArtistImages(int artistId, NpgsqlConnection connection)
{
const string getArtistLinkQuery = "SELECT * FROM public.artist_images " +
"WHERE artist_id = @artistId";
"WHERE artist_id = @artistId";

DefaultTypeMap.MatchNamesWithUnderscores = true;
return (await connection.QueryAsync<ArtistImage>(getArtistLinkQuery, new
Expand All @@ -102,7 +104,8 @@ public static async Task<ICollection<ArtistImage>> GetArtistImages(int artistId,
})).ToList();
}

public static async Task AddOrUpdateArtistAlias(int artistId, string artistNameBeforeCorrect, NpgsqlConnection connection)
public static async Task AddOrUpdateArtistAlias(int artistId, string artistNameBeforeCorrect,
NpgsqlConnection connection)
{
if (string.Equals(artistNameBeforeCorrect, "rnd", StringComparison.OrdinalIgnoreCase) ||
string.Equals(artistNameBeforeCorrect, "random", StringComparison.OrdinalIgnoreCase) ||
Expand All @@ -111,7 +114,8 @@ public static async Task AddOrUpdateArtistAlias(int artistId, string artistNameB
return;
}

const string selectQuery = @"SELECT * FROM public.artist_aliases WHERE artist_id = @artistId AND alias = @alias LIMIT 1";
const string selectQuery =
@"SELECT * FROM public.artist_aliases WHERE artist_id = @artistId AND alias = @alias LIMIT 1";
var result = await connection.QueryFirstOrDefaultAsync<ArtistAlias>(selectQuery, new
{
artistId,
Expand All @@ -132,7 +136,8 @@ public static async Task AddOrUpdateArtistAlias(int artistId, string artistNameB
}
}

public static async Task AddOrUpdateArtistGenres(int artistId, IEnumerable<string> genreNames, NpgsqlConnection connection)
public static async Task AddOrUpdateArtistGenres(int artistId, IEnumerable<string> genreNames,
NpgsqlConnection connection)
{
const string deleteQuery = @"DELETE FROM public.artist_genres WHERE artist_id = @artistId";
await connection.ExecuteAsync(deleteQuery, new { artistId });
Expand All @@ -150,15 +155,18 @@ public static async Task AddOrUpdateArtistGenres(int artistId, IEnumerable<strin
}
}

public static async Task AddOrUpdateArtistLinks(int artistId, IEnumerable<ArtistLink> links, NpgsqlConnection connection)
public static async Task AddOrUpdateArtistLinks(int artistId, IEnumerable<ArtistLink> links,
NpgsqlConnection connection)
{
try
{
const string deleteQuery = @"DELETE FROM public.artist_links WHERE artist_id = @artistId AND manually_added = false";
const string deleteQuery =
@"DELETE FROM public.artist_links WHERE artist_id = @artistId AND manually_added = false";
await connection.ExecuteAsync(deleteQuery, new { artistId });

const string insertQuery = @"INSERT INTO public.artist_links(artist_id, url, username, type, manually_added) " +
"VALUES (@artistId, @url, @username, @type, @manuallyAdded)";
const string insertQuery =
@"INSERT INTO public.artist_links(artist_id, url, username, type, manually_added) " +
"VALUES (@artistId, @url, @username, @type, @manuallyAdded)";

foreach (var link in links)
{
Expand All @@ -177,7 +185,6 @@ public static async Task AddOrUpdateArtistLinks(int artistId, IEnumerable<Artist
Console.WriteLine(e);
throw;
}

}

public static async Task<IReadOnlyCollection<UserArtist>> GetUserArtists(int userId, NpgsqlConnection connection)
Expand All @@ -204,4 +211,26 @@ public static async Task<int> GetArtistPlayCountForUser(NpgsqlConnection connect
artistName
});
}

public static async Task<List<ArtistPopularity>> GetArtistsPopularity(List<string> artistNames,
NpgsqlConnection connection)
{
const string getArtistsQuery = @"
WITH artist_list(name) AS (
VALUES (CAST(@artistNames AS CITEXT[]))
)
SELECT a.name, a.popularity
FROM public.artists a
JOIN artist_list l ON UPPER(a.name) = UPPER(l.name)
WHERE a.popularity IS NOT NULL
ORDER BY a.name";

DefaultTypeMap.MatchNamesWithUnderscores = true;
var artists = await connection.QueryAsync<ArtistPopularity>(getArtistsQuery, new
{
artistNames = artistNames.ToArray()
});

return artists.ToList();
}
}

0 comments on commit 4db8f2c

Please sign in to comment.