public override RentDto Create(CreateRentDto input) { var pendingRequestsCount = _rentRepository.GetPendingRequestsForComicByUser(input.ReceiverId, input.ComicId).Count(); var avaibleRequests = 4 - pendingRequestsCount; if (avaibleRequests == 0) { throw new AppException("You can only make 4 requests for a comic"); } return(base.Create(input)); }
public IEnumerable <UserDto> FindUsersWithComic(int userId, int comicId) { var comicCollections = _comicCollectionRepository.GetComicCollectionsByComicId(comicId); var pendingRequests = _rentRepository.GetPendingRequestsForComicByUser(userId, comicId); var rentInProgress = _rentRepository.GetRentRequestForuserInProgress(userId, comicId); var requestsAvaible = 4 - pendingRequests.Count(); var userDtos = new List <UserDto>(); if (requestsAvaible == 0) { throw new AppException("You can only make 4 requests for one comic"); } if (rentInProgress != null) { throw new AppException("You already rented this comic"); } foreach (var comicCollection in comicCollections) { var user = _userRepository.Get(comicCollection.Collection.UserId); var rentRequests = _rentRepository.GetInProgressRentsForGiverId(user.Id, comicId); var userDto = Mapper.Map <UserDto>(user); if (userId != user.Id && !userDtos.Any(e => e.Id == userDto.Id) && rentRequests.Count() == 0) { userDtos.Add(userDto); } } foreach (var pendingRequest in pendingRequests) { if (pendingRequest.ReceiverId == userId) { var userDtoToDelete = userDtos.Find(e => e.Id == pendingRequest.GiverId); if (userDtoToDelete != null) { userDtos.Remove(userDtoToDelete); } } } return(userDtos.PickRandom(requestsAvaible)); }