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)); }
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))); }