public async Task <CountArray <AggregatedOfferDto> > AggregateOffersAsync(OffersFilterDto filter) { //TODO: implement HasManyGames in place await using var mnpContext = _contextFactory.Create(); var placesQuery = mnpContext.Places.AsQueryable(); if (filter.PlaceType.HasValue && filter.PlaceType != PlaceType.Undefined) { placesQuery = placesQuery.Where(pl => pl.PlaceType == filter.PlaceType); } var count = await placesQuery.CountAsync(); if (filter.PageNumber.HasValue && filter.PageSize.HasValue) { placesQuery = placesQuery.TakePage(filter.PageSize.Value, filter.PageNumber.Value); } var results = await placesQuery.AsNoTracking().Select(p => new AggregatedOfferDto (p.Id, OfferType.Place, p.Name, p.Description, p.PlaceImages.FirstOrDefault(i => i.IsCurrentPoster).File.FileLink, null, null, null, GameLevel.Undefined, p.PlaceType)) .ToArrayAsync(); return(new CountArray <AggregatedOfferDto>(results, count)); }
public async Task <AggregatedOfferDto[]> GetLobbiesForAggregatingAsync(OffersFilterDto filter) { var lobbiesQuery = _mnpContext.Lobbies .Include(l => l.LobbyImages) .ThenInclude(i => i.File) .AsQueryable(); if (filter.From.HasValue) { lobbiesQuery = lobbiesQuery.Where(l => l.PlannedGameDate >= filter.From.Value); } if (filter.To.HasValue) { lobbiesQuery = lobbiesQuery.Where(l => l.PlannedGameDate <= filter.From.Value); } //TODO: Implement other filters var results = await lobbiesQuery.Select(l => new AggregatedOfferDto( l.Id, OfferType.Lobby, l.Title, l.Description, l.LobbyImages.FirstOrDefault(i => i.IsCurrentPoster).File.FileLink, null, l.PlannedGameDate)) .ToArrayAsync(); return(results); }
public async Task <CountArray <AggregatedOfferDto> > AggregateOffersAsync(OffersFilterDto filter) { var lobbies = await _lobbyService.AggregateOffersAsync(filter); var userOffers = await _userOfferService.AggregateOffersAsync(filter); var places = await _placeService.AggregateOffersAsync(filter); var allItems = lobbies.Items .Concat(userOffers.Items) .Concat(places.Items); var allCount = lobbies.Count + userOffers.Count + places.Count; return(new CountArray <AggregatedOfferDto>(allItems.ToArray(), allCount)); }
public Task <CountArray <AggregatedOfferDto> > AggregateOffersAsync(OffersFilterDto filter) { var offers = new List <AggregatedOfferDto> { new(Guid.Empty, OfferType.Personal, "Тестовый человек, 21 год", "Хочу поиграть в манчкин", "https://www.meme-arsenal.com/memes/1901cf2fa43eac1dba8a005972a6d359.jpg", null, DateTime.Today), new(Guid.Empty, OfferType.Lobby, "Собираем команду", "Нас 4, нужно еще 3", "https://minutes.co/wp-content/uploads/2019/04/shutterstock_1214730637.png", null, DateTime.Today), new(Guid.Empty, OfferType.Event, "Турнир по манчкину", "Какое то описание", "https://static-ru.insales.ru/images/articles/1/3130/150586/munchkin1.jpg?1504076588", null, DateTime.Today), new(Guid.Empty, OfferType.Place, "Антикафе Какое-то", "У нас есть мафия, и много чего еще. Работаем круглосуточно", "https://media-cdn.tripadvisor.com/media/photo-s/15/27/3b/77/caption.jpg", null, DateTime.Today), }; return(Task.FromResult(new CountArray <AggregatedOfferDto>(offers.ToArray(), offers.Count))); }
public async Task <CountArray <AggregatedOfferDto> > AggregateOffersAsync(OffersFilterDto filter) { await using var mnpContext = _contextFactory.Create(); var lobbiesQuery = mnpContext.Lobbies.AsQueryable(); if (filter.From.HasValue) { lobbiesQuery = lobbiesQuery.Where(l => l.PlannedGameDate >= filter.From); } if (filter.To.HasValue) { lobbiesQuery = lobbiesQuery.Where(l => l.PlannedGameDate >= filter.To); } if (filter.PlaceType.HasValue && filter.PlaceType != PlaceType.Undefined) { lobbiesQuery = lobbiesQuery.Where(l => l.PlaceType == filter.PlaceType); } if (filter.GameLevel.HasValue && filter.GameLevel != GameLevel.Undefined) { lobbiesQuery = lobbiesQuery.Where(l => l.GameLevel == filter.GameLevel); } if (!filter.GameName.IsNullOrWhiteSpace()) { lobbiesQuery = lobbiesQuery .Where(l => l.LobbyGames.Any(lg => lg.Game.Name.ToLower().Contains(filter.GameName.ToLower()))); } if (filter.AgeFrom.HasValue) { var dateFrom = DateTime.Now.AddYears(filter.AgeFrom.Value * -1); lobbiesQuery = lobbiesQuery .Where(l => l.LobbyPlayers.Any(lp => lp.Player.BirthDate.Value >= dateFrom)); } if (filter.AgeTo.HasValue) { var dateTo = DateTime.Now.AddYears(filter.AgeTo.Value * -1); lobbiesQuery = lobbiesQuery .Where(l => l.LobbyPlayers.Any(lp => lp.Player.BirthDate.Value <= dateTo)); } var count = await lobbiesQuery.CountAsync(); if (filter.PageNumber.HasValue && filter.PageSize.HasValue) { lobbiesQuery = lobbiesQuery.TakePage(filter.PageSize.Value, filter.PageNumber.Value); } var results = await lobbiesQuery.AsNoTracking() .Select(l => new AggregatedOfferDto( l.Id, OfferType.Lobby, l.Title, l.Description, l.LobbyImages.FirstOrDefault(i => i.IsCurrentPoster).File.FileLink, null, l.PlannedGameDate, l.LobbyGames.Select(lg => lg.Game.Name).ToArray(), l.GameLevel, l.PlaceType)) .ToArrayAsync(); return(new CountArray <AggregatedOfferDto>(results, count)); }
public async Task <CountArray <AggregatedOfferDto> > AggregateOffersAsync(OffersFilterDto filter) { await using var mnpContext = _contextFactory.Create(); var offerQuery = mnpContext.UserOffers.AsQueryable(); if (filter.From.HasValue) { var filterWeekDay = (WeekDays)((int)(filter.From.Value.DayOfWeek + 6) % 7); var hour = filter.From.Value.Hour; offerQuery = offerQuery.Where(l => l.Periods.Any(p => p.IsEveryday || l.Periods.Any(p => p.Day == filterWeekDay && p.HoursFrom >= hour) || l.ActualOfferDate >= filter.From.Value)); } if (filter.To.HasValue) { var filterWeekDay = (WeekDays)((int)(filter.To.Value.DayOfWeek + 6) % 7); var hour = filter.To.Value.Hour; offerQuery = offerQuery.Where(l => l.Periods.Any(p => p.IsEveryday || l.Periods.Any(p => p.Day == filterWeekDay && p.HoursFrom <= hour) || l.ActualOfferDate <= filter.To.Value)); } if (filter.PlaceType.HasValue && filter.PlaceType != PlaceType.Undefined) { offerQuery = offerQuery.Where(l => l.PlaceType == filter.PlaceType); } if (!filter.GameName.IsNullOrWhiteSpace()) { offerQuery = offerQuery .Where(l => l.UserOfferGames.Any(lg => lg.Game.Name.ToLower().Contains(filter.GameName.ToLower()))); } if (filter.AgeFrom.HasValue) { var dateFrom = DateTime.Now.AddYears(filter.AgeFrom.Value * -1); offerQuery = offerQuery .Where(l => l.Author.BirthDate.Value >= dateFrom); } if (filter.AgeTo.HasValue) { var dateTo = DateTime.Now.AddYears(filter.AgeTo.Value * -1); offerQuery = offerQuery .Where(l => l.Author.BirthDate.Value <= dateTo); } var count = await offerQuery.CountAsync(); if (filter.PageNumber.HasValue && filter.PageSize.HasValue) { offerQuery = offerQuery.TakePage(filter.PageSize.Value, filter.PageNumber.Value); } var results = await offerQuery.AsNoTracking() .Select(l => new AggregatedOfferDto( l.Id, OfferType.Personal, l.Author.UserName, l.Description, l.Author.UserImages.FirstOrDefault(i => i.IsCurrentAvatar).File.FileLink, null, l.ActualOfferDate, l.UserOfferGames.Select(lg => lg.Game.Name).ToArray(), GameLevel.Undefined, l.PlaceType)) .ToArrayAsync(); return(new CountArray <AggregatedOfferDto>(results, count)); }