public ActionResult <PagedList <Contact> > GetContacts([FromQuery] ContactParameters contactParameters)
        {
            try{
                //throw new Exception("Exception while fetching the contacts from the storage.");
                if (!contactParameters.ValidAgeRange)
                {
                    _logger.LogWarn("Wrong parameter: Age");
                    return(BadRequest("Max age cannot be less than min age"));
                }

                var contacts = _repository.Contact.GetContacts(contactParameters);

                var metadata = new
                {
                    contacts.TotalCount,
                    contacts.PageSize,
                    contacts.CurrentPage,
                    contacts.TotalPages,
                    contacts.HasNext,
                    contacts.HasPrevious
                };

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

                _logger.LogInfo($"Returned {contacts.Count} out of {contacts.TotalCount} contacts from database.");

                return(Ok(contacts));
            } catch (Exception ex) {
                _logger.LogError($"Exception while fetching the contacts. {ex}");
                return(StatusCode(500, "Internal server error"));
            }
        }
Exemple #2
0
        public PagedList <Contact> GetContacts(ContactParameters contactParameters)
        {
            // Build dynamically the lambda expression for filters
            var parameter = Expression.Parameter(typeof(Contact), "c");

            // Age filter
            var minAgeConstant   = Expression.Constant(contactParameters.MinAge);
            var maxAgeConstant   = Expression.Constant(contactParameters.MaxAge);
            var ageProperty      = Expression.Property(parameter, "Age");
            var minAgeExpression = Expression.GreaterThanOrEqual(ageProperty, minAgeConstant);
            var maxAgeExpression = Expression.LessThanOrEqual(ageProperty, maxAgeConstant);
            var expression       = Expression.And(minAgeExpression, maxAgeExpression);

            // Gender filter
            if (!String.IsNullOrEmpty(contactParameters.Gender))
            {
                var genderProperty   = Expression.Property(parameter, "Gender");
                var genderConstant   = Expression.Constant(contactParameters.Gender);
                var genderExpression = Expression.Equal(genderProperty, genderConstant);
                expression = Expression.And(expression, genderExpression);
            }

            // Find contacts
            var contacts = FindByCondition(Expression.Lambda <Func <Contact, bool> >(expression, parameter));

            // Sort contacts
            var sortedContacts = _sortHelper.ApplySort(contacts, contactParameters.SortBy);

            return(PagedList <Contact> .ToPagedList(
                       sortedContacts,
                       contactParameters.PageNumber,
                       contactParameters.PageSize));
        }
        public PagedList <Contact> FindByCondition(ContactParameters parameters, Expression <Func <Contact, bool> > expression)
        {
            IQueryable <Contact> contacts = FindByCondition(expression);

            SearchByDate(ref contacts, parameters.FromDate, parameters.ToDate);

            return(PagedList <Contact> .ToPagedList(FindByCondition(expression),
                                                    parameters.PageNumber,
                                                    parameters.PageSize));
        }
Exemple #4
0
        public void NavigateBackToDetail(ContactViewModel fromModel, ContactParameters parameters)
        {
            var contactActivity = GetActivity <ContactViewModel, ContactActivity>(fromModel);

            var intent = new Intent();

            intent.PutViewModelParameters(parameters);
            contactActivity.NotNull().SetResult(Result.Ok, intent);

            contactActivity.NotNull().Finish();
        }
        public IActionResult GetContactByPetId(Guid petId, [FromQuery] ContactParameters parametrs)
        {
            PagedList <Contact> contacts = _repoWrapper.Contact
                                           .FindByCondition(parametrs, c => c.FirstPetId == petId);

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

            var config = new MapperConfiguration(cfg => cfg.CreateMap <Contact, ContactViewModel>());
            var mapper = new Mapper(config);
            IEnumerable <ContactViewModel> contactsView = mapper
                                                          .Map <IEnumerable <Contact>, IEnumerable <ContactViewModel> >(contacts);

            return(Ok(contacts));
        }
        public async Task <PagedList <ContactDTO> > GetAll(ContactParameters contactParameters, CancellationToken cancellationToken = default)
        {
            var contacts = await _repository.GetAll(
                include : source => source
                .Include(c => c.PhoneNumbers),
                filter : GetFilter(contactParameters.SearchString),
                orderBy : GetSort(contactParameters.OrderBy, contactParameters.SortDirection),
                cancellationToken : cancellationToken);

            var mappedContacts = _mapper.Map <IEnumerable <ContactDTO> >(contacts);



            return(PagedList <ContactDTO> .ToPagedList(mappedContacts, contactParameters.PageNumber, contactParameters.PageSize));
        }
        public async Task <IActionResult> GetAll([FromQuery] ContactParameters contactParameters, CancellationToken cancellationToken = default)
        {
            var contacts = await _contactService.GetAll(contactParameters, cancellationToken);

            var metadata = new
            {
                contacts.TotalCount,
                contacts.PageSize,
                contacts.CurrentPage,
                contacts.TotalPages,
                contacts.HasNext,
                contacts.HasPrevios
            };

            Response.Headers.Add("pagination", JsonConvert.SerializeObject(metadata));

            return(Ok(contacts));
        }
        public async Task <IActionResult> GetContactsForVendor(int vendorId, [FromQuery] ContactParameters contactParameters)
        {
            var contacts = await _repository.Contact.GetContacts(vendorId, contactParameters);

            var metadata = new
            {
                contacts.TotalCount,
                contacts.PageSize,
                contacts.CurrentPage,
                contacts.TotalPages,
                contacts.HasNext,
                contacts.HasPrevious
            };

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

            return(Ok(contacts));
        }
        public async Task <PagedList <ContactDomainObj> > GetContacts(int entityID, ContactParameters contactParameters)
        {
            if (DbContext.BusinessEntity.Where(v => v.BusinessEntityID == entityID).Any())
            {
                var pagedList = await PagedList <ContactDomainObj> .ToPagedList(
                    DbContext.ContactDomainObj
                    .Where(contact => contact.ParentEntityID == entityID)
                    .AsQueryable()
                    .OrderBy(p => p.LastName)
                    .ThenBy(p => p.FirstName)
                    .ThenBy(p => p.MiddleName),
                    contactParameters.PageNumber,
                    contactParameters.PageSize);

                return(pagedList);
            }
            else
            {
                var msg = "Error: Invalid BusinessEntityID detected.";
                RepoLogger.LogError(CLASSNAME + ".GetContacts " + msg);
                throw new AdventureWorksInvalidEntityIdException(msg);
            }
        }
        public List <FullContact> GetFullContacts(ContactParameters contactParameters)
        {
            // INNER JOIN lambda

            /*return this.RepositoryContext.Contacts.Join(
             * this.RepositoryContext.Addresses,
             * contact => contact.Id,
             * address => address.ContactId,
             * (contact, address) => new FullContact
             * {
             * ZipCode = address.ZipCode,
             * City = address.City,
             * FirstName = contact.FirstName,
             * LastName = contact.LastName
             * }
             * ).ToList();*/

            // LEFT JOIN lambda

            /*return this.RepositoryContext.Contacts
             *      .GroupJoin(
             *          this.RepositoryContext.Addresses,
             *          contact => contact.Id,
             *          address => address.ContactId,
             *          (contact, address) => new { contact, address }
             *      )
             *      .SelectMany(
             *          x => x.address.DefaultIfEmpty(),
             *          (x, address) => new FullContact {
             *              FirstName = x.contact.FirstName,
             *              LastName = x.contact.LastName,
             *              City = address == null ? string.Empty : address.City,
             *              ZipCode = address == null ? 0 : address.ZipCode
             *          }
             *      ).ToList();*/

            // LEFT JOIN Query syntax

            /*var query = from contact in this.RepositoryContext.Contacts
             *                join address in this.RepositoryContext.Addresses
             *                on contact.Id equals address.ContactId
             *                into ContactAddressGroup
             *                from address in ContactAddressGroup.DefaultIfEmpty()
             *                select new FullContact
             *                {
             *                    FirstName = contact.FirstName,
             *                    LastName = contact.LastName,
             *                    Gender = contact.Gender,
             *                    ZipCode = address.ZipCode,
             *                    City = address.City,
             *                };*/

            List <FullContact> fullContacts = new List <FullContact> {
            };

            using (var context = this.RepositoryContext) {
                var query = from contact in context.Contacts
                            join child in context.Children on contact.Id equals child.ContactId
                            into ChildGroup
                            from c in ChildGroup.DefaultIfEmpty()
                            join address in context.Addresses on contact.Id equals address.ContactId
                            into AddressGroup
                            from a in AddressGroup.DefaultIfEmpty()
                            select new {
                    Contact = contact,
                    Address = a,
                    Child   = c
                };
                // Filters
                if (!string.IsNullOrEmpty(contactParameters.Gender))
                {
                    query = query.Where(q => q.Contact.Gender == contactParameters.Gender);
                }

                // Group by contact
                var grouping = query.ToLookup(q => q.Contact.Id);
                Console.WriteLine("Items Count: {0}", grouping.Count);

                foreach (var item in grouping)
                {
                    var fullContact = new FullContact()
                    {
                        FirstName = item.First().Contact.FirstName,
                        LastName  = item.First().Contact.LastName,
                        Gender    = item.First().Contact.Gender,
                        ZipCode   = item.First().Address == null ? 0 : item.First().Address.ZipCode,
                        City      = item.First().Address?.City,
                        Children  = new List <Child> {
                        }
                    };

                    foreach (var i in item)
                    {
                        if (i.Child != null)
                        {
                            fullContact.Children.Add(
                                new Child()
                            {
                                Name = i.Child.Name
                            }
                                );
                        }
                    }

                    fullContacts.Add(fullContact);
                }
            }

            return(fullContacts);
        }
Exemple #11
0
        public ActionResult <List <FullContact> > GetFullContacts([FromQuery] ContactParameters contactParameters)
        {
            var fullContacts = _repository.Address.GetFullContacts(contactParameters);

            return(Ok(fullContacts));
        }