예제 #1
0
        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));
        }