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")); } }
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)); }
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); }
public ActionResult <List <FullContact> > GetFullContacts([FromQuery] ContactParameters contactParameters) { var fullContacts = _repository.Address.GetFullContacts(contactParameters); return(Ok(fullContacts)); }