|
|
|
@ -326,6 +326,7 @@ Open the `BookAppService` interface in the `Books` folder of the `Acme.BookStore
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Linq.Dynamic.Core;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Acme.BookStore.Authors;
|
|
|
|
|
using Acme.BookStore.Permissions;
|
|
|
|
@ -387,23 +388,17 @@ namespace Acme.BookStore.Books
|
|
|
|
|
|
|
|
|
|
public override async Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input)
|
|
|
|
|
{
|
|
|
|
|
//Set a default sorting, if not provided
|
|
|
|
|
if (input.Sorting.IsNullOrWhiteSpace())
|
|
|
|
|
{
|
|
|
|
|
input.Sorting = nameof(Book.Name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Get the IQueryable<Book> from the repository
|
|
|
|
|
var queryable = await Repository.GetQueryableAsync();
|
|
|
|
|
|
|
|
|
|
//Prepare a query to join books and authors
|
|
|
|
|
var query = from book in queryable
|
|
|
|
|
join author in _authorRepository on book.AuthorId equals author.Id
|
|
|
|
|
orderby input.Sorting //TODO: Can not sort like that!
|
|
|
|
|
select new {book, author};
|
|
|
|
|
|
|
|
|
|
//Paging
|
|
|
|
|
query = query
|
|
|
|
|
.OrderBy(NormalizeSorting(input.Sorting))
|
|
|
|
|
.Skip(input.SkipCount)
|
|
|
|
|
.Take(input.MaxResultCount);
|
|
|
|
|
|
|
|
|
@ -435,6 +430,25 @@ namespace Acme.BookStore.Books
|
|
|
|
|
ObjectMapper.Map<List<Author>, List<AuthorLookupDto>>(authors)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static string NormalizeSorting(string sorting)
|
|
|
|
|
{
|
|
|
|
|
if (sorting.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
return $"book.{nameof(Book.Name)}";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sorting.Contains("authorName", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return sorting.Replace(
|
|
|
|
|
"authorName",
|
|
|
|
|
"author.Name",
|
|
|
|
|
StringComparison.OrdinalIgnoreCase
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $"book.{sorting}";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|