label related work

This commit is contained in:
Steven Hildreth 2018-12-09 17:30:55 -06:00
parent 7e1286363f
commit 6242831067
4 changed files with 36 additions and 4 deletions

View file

@ -48,10 +48,11 @@ namespace Roadie.Api.Controllers
[HttpGet]
[ProducesResponseType(200)]
public async Task<IActionResult> List([FromQuery]PagedRequest request)
public async Task<IActionResult> List([FromQuery]PagedRequest request, bool? doRandomize = false)
{
var result = await this.LabelService.List(roadieUser: await this.CurrentUserModel(),
request: request);
request: request,
doRandomize: doRandomize);
if (!result.IsSuccess)
{
return StatusCode((int)HttpStatusCode.InternalServerError);

View file

@ -378,6 +378,17 @@ namespace Roadie.Api.Services
select a.Id
).ToArray();
}
int[] labelArtistIds = new int[0];
if(request.FilterToLabelId.HasValue)
{
labelArtistIds = (from l in this.DbContext.Labels
join rl in this.DbContext.ReleaseLabels on l.Id equals rl.LabelId
join r in this.DbContext.Releases on rl.ReleaseId equals r.Id
where l.RoadieId == request.FilterToLabelId
select r.ArtistId)
.Distinct()
.ToArray();
}
var onlyWithReleases = onlyIncludeWithReleases ?? true;
var result = (from a in this.DbContext.Artists
where (!onlyWithReleases || a.ReleaseCount > 0)
@ -385,6 +396,7 @@ namespace Roadie.Api.Services
where (request.FilterMinimumRating == null || a.Rating >= request.FilterMinimumRating.Value)
where (request.FilterValue == "" || (a.Name.Contains(request.FilterValue) || a.SortName.Contains(request.FilterValue) || a.AlternateNames.Contains(request.FilterValue)))
where (!request.FilterFavoriteOnly || favoriteArtistIds.Contains(a.Id))
where (request.FilterToLabelId == null || labelArtistIds.Contains(a.Id))
select new ArtistList
{
DatabaseId = a.Id,

View file

@ -1,4 +1,5 @@
using Mapster;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Roadie.Library;
using Roadie.Library.Caching;
@ -156,9 +157,26 @@ namespace Roadie.Api.Services
TrackCount = l.TrackCount,
Thumbnail = this.MakeLabelThumbnailImage(l.RoadieId)
});
var sortBy = string.IsNullOrEmpty(request.Sort) ? request.OrderValue(new Dictionary<string, string> { { "SortName", "ASC" }, { "Label.Text", "ASC" } }) : request.OrderValue(null);
LabelList[] rows = null;
var rowCount = result.Count();
var rows = result.OrderBy(sortBy).Skip(request.SkipValue).Take(request.LimitValue).ToArray();
if (doRandomize ?? false)
{
var randomLimit = roadieUser?.RandomReleaseLimit ?? 100;
request.Limit = request.LimitValue > randomLimit ? randomLimit : request.LimitValue;
var sql = "SELECT l.Id FROM `label` l ORDER BY RAND() LIMIT {0}";
rows = (from rdn in this.DbContext.Labels.FromSql(sql, randomLimit)
join rs in result on rdn.Id equals rs.DatabaseId
select rs)
.Take(request.LimitValue)
.ToArray();
}
else
{
var sortBy = string.IsNullOrEmpty(request.Sort) ? request.OrderValue(new Dictionary<string, string> { { "SortName", "ASC" }, { "Label.Text", "ASC" } }) : request.OrderValue(null);
rows = result.OrderBy(sortBy).Skip(request.SkipValue).Take(request.LimitValue).ToArray();
}
sw.Stop();
return new Library.Models.Pagination.PagedResult<LabelList>
{

View file

@ -105,6 +105,7 @@ namespace Roadie.Library.Models.Pagination
public Guid? FilterToTrackId { get; set; }
public Guid? FilterToCollectionId { get; set; }
public Guid? FilterToPlaylistId { get; set; }
public Guid? FilterToLabelId { get; set; }
public int? FilterMinimumRating { get; set; }
public bool FilterRatedOnly { get; set; }