public async Task <ResourceResponseDto> CreateOneAsync(Resource resource)
        {
            // Validando que no exista un recurso con el codigo ingresado
            var foundByCode = await _resourceRepository.FindOneByCodeAsync(resource.Code);

            if (foundByCode != null)
            {
                throw new BadRequestException($"Resource with code {resource.Code} already exists");
            }


            // Validando que el tipo de recurso exista
            var resourceType = await _resourceTypeRepository.GetOneByIdAsync(resource.ResourceTypeId);

            if (resourceType == null)
            {
                throw new BadRequestException($"Resource Type with id {resource.Id} was not found");
            }

            resource.CreatedAt = new DateTime();
            resource.UpdatedAt = new DateTime();
            resource.IsActive  = true;

            await _resourceRepository.CreateOneAsync(resource);

            return(ResourceResponseDto.FromResource(resource));
        }
 public async Task <ResourceType> GetOneByIdAsync(int id)
 {
     return(await _resourceTypeRepository.GetOneByIdAsync(id));
 }
Example #3
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)));
        }