public async Task <IActionResult> GetAllOrFilter([FromQuery] FilterSeatsRequest filterSeats) { return(Ok(await _seatService.GetSeats(filterSeats))); }
public async Task <IEnumerable <GetSeatRequest> > GetSeats(FilterSeatsRequest filterSeats) { var seats = await _seatRepository.GetAllOrFilterSeats(filterSeats); return(seats.Select(c => _seatConverter.SeatToGetSeatRequest(c))); }
public async Task <List <Seat> > GetAllOrFilterSeats(FilterSeatsRequest filterSeats) { var duplicateSeats = new List <Seat>(); int queryCount = 0; if (FilterTools.AreIntsCorrect(filterSeats.MinSeatId, filterSeats.MaxSeatId)) { var filterIds = _dataContext.Seats.Where(x => x.SeatId >= filterSeats.MinSeatId && x.SeatId <= filterSeats.MaxSeatId); foreach (var id in filterIds) { duplicateSeats.Add(id); } queryCount++; } if (FilterTools.AreIntsCorrect(filterSeats.MinTypeId, filterSeats.MaxSeatId)) { var filterTypes = _dataContext.Seats.Where(x => x.TypeId >= filterSeats.MinTypeId && x.TypeId <= filterSeats.MaxSeatId); foreach (var type in filterTypes) { duplicateSeats.Add(type); } queryCount++; } if (FilterTools.AreIntsCorrect(filterSeats.MinSeatNumber, filterSeats.MaxSeatNumber)) { var filterSeatNums = _dataContext.Seats.Where(x => x.SeatNumber >= filterSeats.MinSeatNumber && x.SeatNumber <= filterSeats.MaxSeatNumber); foreach (var seatNum in filterSeatNums) { duplicateSeats.Add(seatNum); } queryCount++; } if (FilterTools.AreIntsCorrect(filterSeats.MinRowNumber, filterSeats.MaxRowNumber)) { var filterRows = _dataContext.Seats.Where(x => x.RowNumber >= filterSeats.MinRowNumber && x.RowNumber <= filterSeats.MaxRowNumber); foreach (var row in filterRows) { duplicateSeats.Add(row); } queryCount++; } if (FilterTools.AreIntsCorrect(filterSeats.MinSectorNumber, filterSeats.MaxSectorNumber)) { var filterSectors = _dataContext.Seats.Where(x => x.SectorNumber >= filterSeats.MinSectorNumber && x.SectorNumber <= filterSeats.MaxSectorNumber); foreach (var sector in filterSectors) { duplicateSeats.Add(sector); } queryCount++; } if (FilterTools.AreIntsCorrect(filterSeats.MinPlaceId, filterSeats.MaxPlaceId)) { var filterPlaces = _dataContext.Seats.Where(x => x.PlaceId >= filterSeats.MinPlaceId && x.PlaceId <= filterSeats.MaxPlaceId); foreach (var place in filterPlaces) { duplicateSeats.Add(place); } queryCount++; } var group = duplicateSeats.GroupBy(i => i); var finalSeats = new List <Seat>(); if (queryCount == 0) { return(await _dataContext.Seats.ToListAsync()); } foreach (var item in group) { if (item.Count() == queryCount) { finalSeats.Add(item.Key); } } return(finalSeats); }