using System.Linq; using System.Threading.Tasks; using xCommons.Extensions; using xDataService.Extensions; using xExceptions.Constants; using xIdentityModels.Extensions; using xIds.Extensions; using xModels.Dtos; namespace xIds.Providers { public partial class XIdentityManager { /// /// Retrieve Users as Query Model for Query Service ... /// /// /// /// /// /// public async Task> QueryUsers( string requestedUserSelectByParam, XQuery query, string role = null, bool forceRole = false ) { // // Validation ... if (query.IsNull()) { XException.InvalidArgs.Throw(); } // // Normalize ... query = query.NormalizeQuery(DataConfiguration.ToXDataServiceConfig()); // // Since in Resourceable Entities we have to Search on Locales // we Must Implement Senario Custom ... var items = GetUsersDbSet() .ToList() .Where(u => !u.ContainsUserSelectByParam(requestedUserSelectByParam)) .ToList() .AsEnumerable(); // var totalItemsCount = items.Count(); // // Apply Filter ... if (!query.Filter.IsNullOrEmpty()) { // items = items .ApplyFilter(query.Filter); } int filteredItemsCount = items.Count(); // // Count Pages ... var totalPagesCount = query.CountPages(totalItemsCount); var filteredPagesCount = query.CountPages(filteredItemsCount); // // Apply Paging and Sorting ... if (totalItemsCount > 0 && filteredItemsCount > 0) { // // Apply Sorting ... items = items .ToList() .ApplySorting( query.SortBy, query.IsAscending ); // // Apply Paging ... items = items .ToList() .ApplyPaging( query.Page, query.PageSize ); } // // Generate Result Object ... // Query = query, var result = new XQueryResult { Items = items .Select(u => u.Id), Page = query.Page, PageSize = query.PageSize, TotalPages = totalPagesCount, TotalItems = totalItemsCount, TotalFilteredPages = filteredPagesCount, TotalFilteredItems = filteredItemsCount }; // return await Task.Run(() => result); } } }