/// <summary> /// Gets a list of clubs based on a query /// </summary> /// <returns>A list of <see cref="Club"/> objects. An empty list if no clubs are found.</returns> public async Task <List <Club> > ReadClubs(ClubFilter filter) { filter = filter ?? new ClubFilter(); if (filter.TeamIds.Any()) { return(await SelectClubsWhere($"c.ClubId IN (SELECT ClubId FROM {Tables.Team} WHERE TeamId IN @TeamIds)", new { filter.TeamIds }).ConfigureAwait(false)); } else { return(await SelectClubsWhere("1=1", null).ConfigureAwait(false)); } }
public IActionResult GetClubsList([FromBody] ClubFilter filter) { try { var email = User.Claims.SingleOrDefault(c => c.Type == "email")?.Value; if (string.IsNullOrEmpty(email)) { return(BadRequest("Authorization failed.")); } return(Ok(_service.GetClubs(filter, email))); } catch (Exception e) { return(BadRequest(e.Message)); } }
public void TestClubFilter() { const string filter = "1000, d; 1100 - 1500, 3414 4551"; Assert.IsFalse(ClubFilter.IsMatch(filter, null)); Assert.IsFalse(ClubFilter.IsMatch(filter, -1)); Assert.IsTrue(ClubFilter.IsMatch(filter, 1000)); Assert.IsFalse(ClubFilter.IsMatch(filter, 1001)); Assert.IsFalse(ClubFilter.IsMatch(filter, 1009)); Assert.IsTrue(ClubFilter.IsMatch(filter, 1100)); Assert.IsTrue(ClubFilter.IsMatch(filter, 1300)); Assert.IsTrue(ClubFilter.IsMatch(filter, 1500)); Assert.IsFalse(ClubFilter.IsMatch(filter, 1501)); Assert.IsTrue(ClubFilter.IsMatch(filter, 3414)); Assert.IsTrue(ClubFilter.IsMatch(filter, 4551)); Assert.IsFalse(ClubFilter.IsMatch(filter, 4552)); }
public Page <ClubSummaryDto> GetClubs(ClubFilter filter, string email) { try { var currentUser = _unitOfWork.Users.Get(t => t.Email == email).FirstOrDefault(); if (currentUser == null) { throw new ArgumentException("Internal error happened. Please try a bit later"); } Func <Club, bool> searchCriteria = t => (!filter.IsActive.HasValue || t.IsActive == filter.IsActive.Value) && (!filter.IsFiim.HasValue || t.IsFiim == filter.IsFiim.Value) && (string.IsNullOrEmpty(filter.Country) || string.Equals(t.Country, filter.Country, StringComparison.CurrentCultureIgnoreCase)) && (string.IsNullOrEmpty(filter.City) || string.Equals(t.City, filter.City, StringComparison.CurrentCultureIgnoreCase)) && (string.IsNullOrEmpty(filter.Title) || t.Title.ToLower().StartsWith(filter.Title.ToLower())) && (!filter.CreatorId.HasValue || t.CreatorId == filter.CreatorId.Value) && (filter.Status == ClubStatus.ActiveAndPending ? (t.Status == ClubStatus.Active || t.Status == ClubStatus.PendingActivation) : t.Status == filter.Status); var skip = filter.Page == 0 ? 0 : (filter.Page - 1) * (filter.PageSize ?? 25); var take = filter.PageSize ?? 25; var orderByField = string.IsNullOrEmpty(filter.OrderBy) ? nameof(Club.LastUpdate) : filter.OrderBy; var allClubs = _unitOfWork.Clubs.GetAsQueryable(t => searchCriteria(t)) .Include(t => t.Administrators) .ThenInclude(t => t.User) .Include(t => t.Players) .ThenInclude(t => t.User); var slice = (filter.Asc ? allClubs.OrderBy(t => typeof(Club).GetProperty(orderByField).GetValue(t)) : allClubs.OrderByDescending(t => typeof(Club).GetProperty(orderByField).GetValue(t))) .Skip(skip) .Take(take); var allCount = allClubs.Select(t => t.Id).Count(); var page = new Page <ClubSummaryDto>(filter.Page, filter.PageSize ?? 25, allCount, slice.Select(t => t.ToSummaryDto(currentUser.Id))); return(page); } catch (ArgumentException) { throw; } catch (Exception e) { _logger.LogError(e.Message); throw new Exception("Error while fetching list of clubs. Please try a bit later"); } }