Skip to content

Commit

Permalink
#389: artist grouping, OR connector
Browse files Browse the repository at this point in the history
  • Loading branch information
riipah committed Jun 5, 2018
1 parent f6f92f1 commit c6642c1
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 5 deletions.
2 changes: 1 addition & 1 deletion VocaDbModel/Database/Queries/UserQueries.cs
Original file line number Diff line number Diff line change
Expand Up @@ -906,7 +906,7 @@ class CachedUserStats {
var q = session.OfType<FavoriteSongForUser>().Query()
.Where(a => !a.Song.Deleted && a.User.Id == queryParams.UserId)
.WhereChildHasName(queryParams.TextQuery)
.WhereSongHasArtists(queryParams.ArtistIds, queryParams.ChildVoicebanks)
.WhereSongHasArtists(queryParams.ArtistIds, queryParams.ChildVoicebanks, queryParams.ArtistGrouping)
.WhereHasRating(queryParams.FilterByRating)
.WhereSongIsInList(queryParams.SonglistId)
.WhereSongHasTags(queryParams.TagIds)
Expand Down
12 changes: 12 additions & 0 deletions VocaDbModel/Service/LogicalGrouping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace VocaDb.Model.Service {
public enum LogicalGrouping {
/// <summary>
/// All must match
/// </summary>
And,
/// <summary>
/// One must match
/// </summary>
Or
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using VocaDb.Model.Domain.Artists;
Expand Down Expand Up @@ -71,6 +71,23 @@ public static IQueryable<T> WhereSongHasArtist<T>(this IQueryable<T> query, int

}

public static IQueryable<T> WhereSongHasArtists<T>(this IQueryable<T> query, EntryIdsCollection artistIds, bool childVoicebanks, LogicalGrouping grouping)
where T : ISongLink {

return grouping == LogicalGrouping.And ? WhereSongHasArtists(query, artistIds, childVoicebanks) : WhereSongHasAnyArtist(query, artistIds, childVoicebanks);

}

public static IQueryable<T> WhereSongHasAnyArtist<T>(this IQueryable<T> query, EntryIdsCollection artistIds, bool childVoicebanks)
where T : ISongLink {

if (!artistIds.HasAny)
return query;

return query.Where(s => s.Song.AllArtists.Any(a => artistIds.Ids.Contains(a.Artist.Id)));

}

public static IQueryable<T> WhereSongHasArtists<T>(this IQueryable<T> query, EntryIdsCollection artistIds, bool childVoicebanks)
where T : ISongLink {

Expand Down
2 changes: 1 addition & 1 deletion VocaDbModel/Service/Search/SongSearch/SongSearch.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
Expand Down
4 changes: 3 additions & 1 deletion VocaDbModel/Service/Search/User/RatedSongQueryParams.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using VocaDb.Model.Domain.PVs;
using VocaDb.Model.Domain.PVs;
using VocaDb.Model.Domain.Songs;
using VocaDb.Model.Service.Paging;
using VocaDb.Model.Service.QueryableExtenders;
Expand Down Expand Up @@ -26,6 +26,8 @@ public class RatedSongQueryParams {

public AdvancedSearchFilter[] AdvancedFilters { get; set; }

public LogicalGrouping ArtistGrouping { get; set; }

public int[] ArtistIds { get; set; }

public bool ChildVoicebanks { get; set; }
Expand Down
1 change: 1 addition & 0 deletions VocaDbModel/VocaDb.Model.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,7 @@
<Compile Include="Service\ExtSites\SongDescriptionGenerator.cs" />
<Compile Include="Service\Helpers\EntryReportNotifier.cs" />
<Compile Include="Service\Helpers\FollowedTagNotifier.cs" />
<Compile Include="Service\LogicalGrouping.cs" />
<Compile Include="Service\NameMatchMode.cs" />
<Compile Include="Service\PredicateBuilder.cs" />
<Compile Include="Service\QueriesBase.cs" />
Expand Down
5 changes: 4 additions & 1 deletion VocaDbWeb/Controllers/Api/UserApiController.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
Expand Down Expand Up @@ -409,6 +409,7 @@ public class UserApiController : ApiController {
/// <param name="tagName">Filter by tag name (optional).</param>
/// <param name="artistId">Filter by song artist (optional).</param>
/// <param name="childVoicebanks">Include child voicebanks, if the artist being filtered by has any.</param>
/// <param name="artistGrouping">Logical grouping for artists.</param>
/// <param name="rating">Filter songs by given rating (optional).</param>
/// <param name="songListId">Filter songs by song list (optional).</param>
/// <param name="groupByRating">Group results by rating so that highest rated are first.</param>
Expand All @@ -432,6 +433,7 @@ public class UserApiController : ApiController {
[FromUri] int[] tagId = null,
[FromUri] int[] artistId = null,
bool childVoicebanks = false,
LogicalGrouping artistGrouping = LogicalGrouping.And,
SongVoteRating? rating = null,
int? songListId = null,
bool groupByRating = true,
Expand All @@ -450,6 +452,7 @@ public class UserApiController : ApiController {
TextQuery = textQuery,
SortRule = sort ?? RatedSongForUserSortRule.Name,
ArtistIds = artistId,
ArtistGrouping = artistGrouping,
ChildVoicebanks = childVoicebanks,
FilterByRating = rating ?? SongVoteRating.Nothing,
GroupByRating = groupByRating,
Expand Down

0 comments on commit c6642c1

Please sign in to comment.