Beispiel #1
0
        public async Task <IActionResult> GetByFilters([FromQuery] GetByFiltersRequestDto requestDto)
        {
            try
            {
                var response = await _publicationService.GetByFiltersAsync(requestDto);

                return(Ok(response));
            }
            catch (Exception e)
            {
                return(HttpExceptionMapper.ToHttpActionResult(e));
            }
        }
Beispiel #2
0
        public async Task <IEnumerable <GetByFiltersResponseDto> > GetByFiltersAsync(GetByFiltersRequestDto requestDto)
        {
            var campusFromDb = await campusRepository.GetOneByIdAsync(requestDto.CampusId);

            if (campusFromDb == null)
            {
                throw new BadRequestException("El campus elegido no existe");
            }

            if (!(requestDto.SeatStartTime >= DateTime.Now.AddMinutes(-30) && requestDto.SeatStartTime <= DateTime.Now.AddHours(1).AddMinutes(30)))
            {
                throw new BadRequestException("La hora de inicio del asiento está fuera de los límites");
            }

            if (!((requestDto.SeatStartTime.Minute == 30 || requestDto.SeatStartTime.Minute == 0) && requestDto.SeatStartTime.Second == 0))
            {
                throw new BadRequestException("La hora de inicio del asiento debe ser redonda");
            }

            if (requestDto.SeatEndTime.HasValue)
            {
                var intervalMinutes = (requestDto.SeatEndTime.Value - requestDto.SeatStartTime).TotalMinutes;
                if (!(intervalMinutes >= 30 && intervalMinutes <= 120))
                {
                    throw new BadRequestException("La hora de fin del asiento está fuera de los límites");
                }

                if (!((requestDto.SeatEndTime.Value.Minute == 30 || requestDto.SeatEndTime.Value.Minute == 0) && requestDto.SeatEndTime.Value.Second == 0))
                {
                    throw new BadRequestException("La hora de fin del asiento debe ser redonda");
                }
            }
            else
            {
                requestDto.SeatEndTime = requestDto.SeatStartTime.AddHours(2);
            }

            if (requestDto.SeatEndTime.Value.Ticks - requestDto.SeatStartTime.Ticks <= 0)
            {
                throw new BadRequestException("La hora de fin del asiento no puede ser igual o menor que la hora de inicio del asiento");
            }

            // si tiene un recurso equipado
            if (requestDto.ResourceTypeId.HasValue)
            {
                var resourceTypeFromDb = await _resourceTypeRepository.GetOneByIdAsync(requestDto.ResourceTypeId.Value);

                if (resourceTypeFromDb == null)
                {
                    throw new BadRequestException("El recurso elegido no existe");
                }
            }

            var publicationEntities = _publicationRepository.GetAllForGuests(
                requestDto.CampusId,
                requestDto.SeatStartTime,
                requestDto.SeatEndTime.Value,
                requestDto.ResourceTypeId
                );

            return(publicationEntities.Select(p => GetByFiltersResponseDto.FromPublicationAndCubicle(p, p.Reservation.Cubicle)));
        }