コード例 #1
0
        private IEnumerable <LinkDto> CreateLinksForSiteContact(
            ContactResourceParameters contactResourceParameters,
            bool hasNext, bool hasPrevious)
        {
            var links = new List <LinkDto>();

            // self
            links.Add(
                new LinkDto(CreateContactResourceUri(
                                contactResourceParameters, ResourceUriType.Current)
                            , "self", "GET"));

            if (hasNext)
            {
                links.Add(
                    new LinkDto(CreateContactResourceUri(
                                    contactResourceParameters, ResourceUriType.NextPage),
                                "nextPage", "GET"));
            }

            if (hasPrevious)
            {
                links.Add(
                    new LinkDto(CreateContactResourceUri(
                                    contactResourceParameters, ResourceUriType.PreviousPage),
                                "previousPage", "GET"));
            }

            return(links);
        }
コード例 #2
0
        public IActionResult Get(ContactResourceParameters contactResourceParameters)
        {
            var contacts         = _contactRepository.GetContacts(contactResourceParameters);
            var previousPageLink = contacts.HasPrevious ?
                                   CreateResourceUri(contactResourceParameters, ResourceUriType.Next)
                : null;

            var nextPageLink = contacts.HasNext ?
                               CreateResourceUri(contactResourceParameters, ResourceUriType.Next)
                : null;

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

            //Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            return(Ok(
                       new
            {
                contacts = _mapper.Map <IEnumerable <ContactViewModel> >(contacts),
                pagination = paginationMetadata
            }
                       ));
        }
コード例 #3
0
        private string CreateResourceUri(ContactResourceParameters contactResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.Previous:
                return(_urlHelper.Link("GetContacts",
                                       new
                {
                    pageNumber = contactResourceParameters.PageNumber - 1,
                    pageSize = contactResourceParameters.PageSize
                }));

            case ResourceUriType.Next:
                return(_urlHelper.Link("GetContacts",
                                       new
                {
                    pageNumber = contactResourceParameters.PageNumber - 1,
                    pageSize = contactResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetContacts",
                                       new
                {
                    pageNumber = contactResourceParameters.PageNumber,
                    pageSize = contactResourceParameters.PageSize
                }));
            }
        }
コード例 #4
0
        public PagedList <Contact> GetCompanyContacts(Guid companyId, ContactResourceParameters contactResourseParameters)
        {
            if (contactResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(contactResourseParameters));
            }

            var collection = _context.Contact as IQueryable <Contact>;

            if (!string.IsNullOrWhiteSpace(contactResourseParameters.SearchQuery))
            {
                var searchQuery = contactResourseParameters.SearchQuery.Trim();
                collection = collection.Where(a => a.FirstName.Contains(searchQuery) || a.LastName.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(contactResourseParameters.OrderBy))
            {
                var contactPropertyMappingDictionary = _propertyMappingService.GetContactPropertyMapping <ContactDto, Contact>();

                collection = collection.ApplySort(contactResourseParameters.OrderBy, contactPropertyMappingDictionary);
            }

            //Paging.... happens LAST
            return(PagedList <Contact> .Create(collection,
                                               contactResourseParameters.PageNumber,
                                               contactResourseParameters.PageSize));
        }
コード例 #5
0
        public IActionResult GetContacts(Guid companyId, Guid siteTypeId, Guid siteId,
                                         [FromQuery] ContactResourceParameters contactResourceParameters)
        {
            if (!_propertyMappingService.ValidSiteMappingExistsFor <ContactDto, Entities.Contact>
                    (contactResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            var contactsFromRepo = _contactRepository.GetCompanyContacts(companyId, contactResourceParameters);

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

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var links = CreateLinksForSiteContact(contactResourceParameters,
                                                  contactsFromRepo.HasNext,
                                                  contactsFromRepo.HasPrevious);

            var shapedContacts = _mapper.Map <IEnumerable <ContactDto> >(contactsFromRepo)
                                 .ShapeData(contactResourceParameters.Fields);

            var shapedContactsWithLinks = shapedContacts.Select(contacts =>
            {
                var siteAsDictionary = contacts as IDictionary <string, object>;
                var siteLinks        = CreateLinksForCompanyContacts(companyId.ToString(), (string)siteAsDictionary["Id"], null);
                siteAsDictionary.Add("links", siteLinks);
                return(siteAsDictionary);
            });

            var linkedCollectionResource = new
            {
                value = shapedContactsWithLinks,
                links
            };

            return(Ok(linkedCollectionResource));
        }
        public IHttpActionResult GetContacts(int tpid, [FromUri] ContactResourceParameters parameters)
        {
            try
            {
                parameters = parameters ?? new ContactResourceParameters();
                IEnumerable <TradingPartnerContact> contacts;

                if (!string.IsNullOrEmpty(parameters.SearchQuery))
                {
                    var searchQuery = parameters.SearchQuery.ToLower();
                    contacts = _contactReadRepository.List(c => (c.City.ToLower().Contains(searchQuery) ||
                                                                 c.Country.ToLower().Contains(searchQuery) ||
                                                                 c.Email.ToLower().Contains(searchQuery) ||
                                                                 c.Name.ToLower().Contains(searchQuery) ||
                                                                 c.Phone.ToLower().Contains(searchQuery) ||
                                                                 c.PostalCode.ToLower().Contains(searchQuery) ||
                                                                 c.Role.ToLower().Contains(searchQuery) ||
                                                                 c.State.ToLower().Contains(searchQuery) ||
                                                                 c.Street.ToLower().Contains(searchQuery)) &&
                                                           c.TradingPartner.Id == tpid
                                                           , q => q.OrderBy(e => e.Name), "", parameters.PageNumber - 1, parameters.PageSize).ToList();
                }
                else
                {
                    contacts = _contactReadRepository.List(c => c.TradingPartner.Id == tpid
                                                           , q => q.OrderBy(e => e.Name), "", parameters.PageNumber - 1, parameters.PageSize).ToList();
                }

                if (contacts == null)
                {
                    return(NotFound());
                }
                var contactsDto = AutoMapper.Mapper.Map <IEnumerable <TradingPartnerContactDetailDto> >(contacts);


                return(Ok(contactsDto));
            }
            catch (Exception ex)
            {
                //LOG
                //return StatusCode(HttpStatusCode.InternalServerError);
                return(InternalServerError(new Exception("An unexpected error occured! Please try again later!")));
            }
        }
コード例 #7
0
        private string CreateContactResourceUri(
            ContactResourceParameters contactResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetSites",
                                new
                {
                    fields = contactResourceParameters.Fields,
                    orderBy = contactResourceParameters.OrderBy,
                    pageNumber = contactResourceParameters.PageNumber - 1,
                    pageSize = contactResourceParameters.PageSize,
                    searchQuery = contactResourceParameters.SearchQuery
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetSites",
                                new
                {
                    fields = contactResourceParameters.Fields,
                    orderBy = contactResourceParameters.OrderBy,
                    pageNumber = contactResourceParameters.PageNumber + 1,
                    pageSize = contactResourceParameters.PageSize,
                    searchQuery = contactResourceParameters.SearchQuery
                }));

            case ResourceUriType.Current:
            default:
                return(Url.Link("GetSites",
                                new
                {
                    fields = contactResourceParameters.Fields,
                    orderBy = contactResourceParameters.OrderBy,
                    pageNumber = contactResourceParameters.PageNumber,
                    pageSize = contactResourceParameters.PageSize,
                    searchQuery = contactResourceParameters.SearchQuery
                }));
            }
        }
コード例 #8
0
ファイル: ContactsController.cs プロジェクト: MSH/PViMS-2
        public async Task <ActionResult <LinkedCollectionResourceWrapperDto <ContactDetailDto> > > GetContactsByDetail(
            [FromQuery] ContactResourceParameters contactResourceParameters)
        {
            if (!_typeHelperService.TypeHasProperties <ContactDetailDto>
                    (contactResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            var query = new ContactsDetailQuery(
                contactResourceParameters.OrderBy,
                contactResourceParameters.PageNumber,
                contactResourceParameters.PageSize);

            _logger.LogInformation(
                "----- Sending query: ContactsDetailQuery");

            var queryResult = await _mediator.Send(query);

            if (queryResult == null)
            {
                return(BadRequest("Query not created"));
            }

            // Prepare pagination data for response
            var paginationMetadata = new
            {
                totalCount  = queryResult.RecordCount,
                pageSize    = contactResourceParameters.PageSize,
                currentPage = contactResourceParameters.PageNumber,
                totalPages  = queryResult.PageCount
            };

            Response.Headers.Add("X-Pagination",
                                 JsonConvert.SerializeObject(paginationMetadata));

            return(Ok(queryResult));
        }