public override async Task <Artist> LastPlayedArtist(int userId) { var sql = @"SELECT a.* FROM `usertrack` ut join `track` t on (ut.trackId = t.id) join `releasemedia` rm on (t.releaseMediaId = rm.id) join `release` r on (rm.releaseId = r.id) join `artist` a on (r.artistId = a.id) where ut.userId = {0} ORDER by ut.lastPlayed desc LIMIT 1"; return(await Artists.FromSqlRaw(sql, userId).FirstOrDefaultAsync()); }
public override async Task <SortedDictionary <int, int> > RandomArtistIds(int userId, int randomLimit, bool doOnlyFavorites = false, bool doOnlyRated = false) { var sql = @"SELECT a.id FROM `artist` a WHERE(a.id NOT IN(select artistId FROM `userartist` where userId = {1} and isDisliked = 1)) OR(a.id IN(select artistId FROM `userartist` where userId = {1} and isFavorite = 1) AND {2} = 1) order BY RIGHT(HEX((1 << 24) * (1 + RAND())), 6) LIMIT 0, {0}"; var ids = await Artists.FromSqlRaw(sql, randomLimit, userId, doOnlyFavorites? "1" : "0").Select(x => x.Id).ToListAsync(); var dict = ids.Select((id, i) => new { key = i, value = id }).ToDictionary(x => x.key, x => x.value); return(new SortedDictionary <int, int>(dict)); }