コード例 #1
0
 public async Task <IActionResult> GetAllOrFilter([FromQuery] FilterSeatsRequest filterSeats)
 {
     return(Ok(await _seatService.GetSeats(filterSeats)));
 }
コード例 #2
0
        public async Task <IEnumerable <GetSeatRequest> > GetSeats(FilterSeatsRequest filterSeats)
        {
            var seats = await _seatRepository.GetAllOrFilterSeats(filterSeats);

            return(seats.Select(c => _seatConverter.SeatToGetSeatRequest(c)));
        }
コード例 #3
0
        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);
        }