예제 #1
0
        public async Task <IActionResult> GetAllByFiltersAsync(
            [FromQuery] CubicleFiltersDto filters
            )
        {
            try
            {
                var items = await _cubicleService.GetCubiclesByFiltersAsync(filters);

                return(Ok(items));
            }
            catch (Exception e)
            {
                return(HttpExceptionMapper.ToHttpActionResult(e));
            }
        }
예제 #2
0
        public async Task <IEnumerable <GetCubicleDto> > GetCubiclesByFiltersAsync(CubicleFiltersDto filtersDto)
        {
            // Validar que el id del campo sea correcto
            var campus = await _campusRepository.GetOneByIdAsync(filtersDto.CampusId);

            if (campus == null)
            {
                throw new NotFoundException($"Campus with id {filtersDto.CampusId} was not found");
            }

            // TODO: Posible validación de pabellón


            // Validando la busqueda no se pueda hacer los domingos
            if (filtersDto.StartTime.DayOfWeek == DayOfWeek.Sunday)
            {
                throw new BadRequestException("You cannot make a reservation on Sunday");
            }


            // Validando que la Hora de busqueda sea correcta
            //	if (filtersDto.StartTime.Minute != 0 || filtersDto.StartTime.Second != 0)
            //	throw new BadRequestException("Reservation StartTime cannot has Minutes or Seconds");


            // Validando que la hora de busqueda se encuentre en el rango [7-23]
            if (filtersDto.StartTime.Hour < 7 || filtersDto.StartTime.Hour >= 23)
            {
                throw new BadRequestException($"The provided hour {filtersDto.StartTime.Hour} is invalid");
            }


            // Validando que el dia de la reserva sea hoy o mañana
            var startTimeDay = filtersDto.StartTime.Day;

            if (startTimeDay != DateTime.Today.Day && startTimeDay != DateTime.Today.AddDays(1).Day)
            {
                throw new BadRequestException("Start time day must be today or tomorrow");
            }


            // Validando que la hora de inicio no sea anterior a la hora actual
            if (filtersDto.StartTime.Hour < DateTime.Now.Hour)
            {
                throw new BadRequestException("Start time cannot be before actual time");
            }


            // TODO: Validar que la maxima hora de fin sea 24 horas más que la hora actual


            // Validando que las horas de reserva se encuentren en el rango [1-2]
            if (filtersDto.ReservationHours <= 0 || filtersDto.ReservationHours > 2)
            {
                throw new BadRequestException("ReservationHours must be 1 or 2");
            }

            var endTime = filtersDto.StartTime.AddHours(filtersDto.ReservationHours);
            var filters = new CubicleFilters
            {
                CampusId   = filtersDto.CampusId,
                PavilionId = filtersDto.PavilionId,
                StartTime  = filtersDto.StartTime,
                EndTime    = endTime,
                TotalSeats = filtersDto.TotalSeats
            };

            var cubicles = await _cubicleRepository.FindAllByFilters(filters);

            return(cubicles.Select(GetCubicleDto.FromCubicle));
        }