예제 #1
0
        public async Task <ActionResult> GetUniversities([FromQuery] UniversityResourceParameters pagedResourceParameters, CancellationToken ct)
        {
            var universityDtos = await _universityService.GetUniversitiesAsync(pagedResourceParameters, ct);

            var previousPageLink = universityDtos.HasPrevious ? CreateUniversitiesResourceUri(pagedResourceParameters, Enums.ResourceUriType.PreviousPage) : null;
            var nextPageLink     = universityDtos.HasNext ? CreateUniversitiesResourceUri(pagedResourceParameters, Enums.ResourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                totalCount  = universityDtos.TotalCount,
                pageSize    = universityDtos.PageSize,
                currentPage = universityDtos.CurrentPage,
                totalPages  = universityDtos.TotalPages,
                previousPageLink,
                nextPageLink
            };

            if (universityDtos == null)
            {
                return(NotFound());
            }

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata));
            return(Ok(universityDtos));
        }
예제 #2
0
        private string CreateUniversitiesResourceUri(UniversityResourceParameters pagedResourceParameters, Enums.ResourceUriType type)
        {
            switch (type)
            {
            case Enums.ResourceUriType.PreviousPage:
                return(_linkGenerator.GetUriByName(this.HttpContext, "GetUniversities",
                                                   new
                {
                    /*name = pagedResourceParameters.Name*/
                    searchQuery = pagedResourceParameters.SearchQuery,
                    pageNumber = pagedResourceParameters.PageNumber - 1,
                    pageSize = pagedResourceParameters.PageSize
                }));        // TODO get the aboslute path

            case Enums.ResourceUriType.NextPage:
                return(_linkGenerator.GetUriByName(this.HttpContext, "GetUniversities",
                                                   new
                {
                    /*name = pagedResourceParameters.Name,*/
                    searchQuery = pagedResourceParameters.SearchQuery,
                    pageNumber = pagedResourceParameters.PageNumber + 1,
                    pageSize = pagedResourceParameters.PageSize
                }));

            default:
                return(_linkGenerator.GetUriByName(this.HttpContext, "GetUniversities",
                                                   new
                {
                    /*name = pagedResourceParameters.Name,*/
                    searchQuery = pagedResourceParameters.SearchQuery,
                    pageNumber = pagedResourceParameters.PageNumber,
                    pageSize = pagedResourceParameters.PageSize
                }));
            }
        }
예제 #3
0
        public async Task <PagedList <UniversityDto> > GetUniversitiesAsync(UniversityResourceParameters resourceParameters, CancellationToken ct)
        {
            var universityEntities = _uow.Universities.GetAll();

            /*if (!string.IsNullOrEmpty(resourceParameters.Name))
             * {
             *  if (Enum.TryParse(resourceParameters.Name, true, out UniversityName name))
             *  {
             *      universityEntities = universityEntities.Where(a => a.Name == name);
             *  }
             * }*/

            if (!string.IsNullOrEmpty(resourceParameters.SearchQuery))
            {
                var searchQueryForWhereClause = resourceParameters.SearchQuery.Trim().ToLowerInvariant();
                universityEntities = universityEntities
                                     .Where(a => a.Name.ToLowerInvariant().Contains(searchQueryForWhereClause)
                                            );
            }

            var pagedListEntities = await PagedList <University> .CreateAsync(universityEntities,
                                                                              resourceParameters.PageNumber, resourceParameters.PageSize, ct);

            var result = _mapper.Map <PagedList <UniversityDto> >(pagedListEntities);

            result.TotalCount  = pagedListEntities.TotalCount;
            result.TotalPages  = pagedListEntities.TotalPages;
            result.CurrentPage = pagedListEntities.CurrentPage;
            result.PageSize    = pagedListEntities.PageSize;

            return(result);
        }
예제 #4
0
파일: APITests.cs 프로젝트: mariekassis/si2
        public void setUp()
        {
            obj        = new UniversitiesController(_linkGenerator, _logger, _universityService);
            id         = new Guid("1B7F86DD-FCD0-42A5-5E5F-08D7D5A16E26");
            repository = new UniversityRepository(dbContext);
            source     = new CancellationTokenSource();
            token      = source.Token;
            pagedResourceParameters = new UniversityResourceParameters();
            context       = new ActionContext();
            universityDto = new UniversityDto();

            //serviceProvider
            var serviceCollection = new ServiceCollection();

            //serviceCollection.AddSingleton<IUniversityService, UniversityService>();
            //serviceCollection.AddTransient<University>();
            serviceCollection.AddTransient <IInstitutionService, InstitutionService>();

            _serviceProvider = serviceCollection.BuildServiceProvider();
            //--------------------------------------------------------------

            uow = new UnitOfWork(dbContext, _serviceProvider);

            //logger
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddFilter("LoggingConsoleApp.University", LogLevel.Debug)
                .AddConsole()
                .AddEventLog();
            });

            logger = loggerFactory.CreateLogger <UniversityService>();
            logger.LogInformation("Example log message");
            //------------------------------------------------------------------

            _mapper           = new MapperConfiguration(mc => { mc.AddProfile(new MappingProfile()); }).CreateMapper();
            universityService = new UniversityService(uow, _mapper, logger);
        }
예제 #5
0
        public void InitializeTestData()
        {
            //Setup test data
            expectedUniversities = GetExpectedUniversities();
            //Arrange
            mockUniversityService  = new Mock <IUniversityService>();
            universitiesController = new UniversitiesController(_linkGenerator, _logger, _universityService);
            //var serviceProviderGet = serviceProvider.GetRequiredService<IUniversityService>();
            uow = new UnitOfWork(dbContext, serviceProvider);
            //universityService = new UniversityService(uow, mapper, logger);
            //iuniversityService = new UniversityService(uow, mapper, logger);
            _mockUnitOfWork = new Mock <IUnitOfWork>();
            _mockLogger     = new Mock <ILogger <UniversityService> >();
            _mapper         = new MapperConfiguration(mc => { mc.AddProfile(new MappingProfile()); }).CreateMapper();

            _universityService = new UniversityService(_mockUnitOfWork.Object, _mapper, _mockLogger.Object);

            //Setup
            source = new CancellationTokenSource();
            token  = source.Token;
            pagedResourceParameters = new UniversityResourceParameters();
            //var expectedUniversitiesTask = expectedUniversitiesAsync();
            mockUniversityService.Setup(m => m.GetUniversitiesAsync(pagedResourceParameters, token)).ReturnsAsync(expectedUniversities);

            //mockUnitOfWork.Setup(mo => mo.Universities).Returns(Universities);
            //mockUnitOfWork.Setup(_mockUnitOfWork => _mockUnitOfWork.Universities.GetAsync(mockUniversityDto.Id, It.IsAny<CancellationToken>())).Returns(Task.FromResult(mockUniversity));



            /*mockUniversityService.Setup(m => m.CreateUniversityAsync(It.IsAny<CreateUniversityDto>(),token)).Returns(
             *  (UniversityDto target) =>
             *  {
             *      expectedUniversities.Add(target);
             *
             *      return expectedUniversities;
             *  });*/

            /*mockProductRepository.Setup(m => m.UpdateProduct(It.IsAny<ProductJSON>())).Returns(
             *  (ProductJSON target) =>
             *  {
             *      var product = expectedProducts.Where(p => p.Id == target.Id).FirstOrDefault();
             *
             *      if (product == null)
             *      {
             *          return false;
             *      }
             *
             *      product.Name = target.Name;
             *      product.Category = target.Category;
             *      product.Price = target.Price;
             *
             *      return true;
             *  });
             *
             * mockProductRepository.Setup(m => m.Delete(It.IsAny<int>())).Returns(
             *  (int productId) =>
             *  {
             *      var product = expectedProducts.Where(p => p.Id == productId).FirstOrDefault();
             *
             *      if (product == null)
             *      {
             *          return false;
             *      }
             *
             *      expectedProducts.Remove(product);
             *
             *      return true;
             *  });*/
        }