public IActionResult GetSpecialists([FromQuery] GetSpecialistsList query) { var all = SpecialistService.GetAll().ToList(); var specialists = GetFullSpecialists(query); return(Ok(new SpecialistsListResponse { Data = specialists, PageSize = query.PageSize, CurrentPage = query.PageNumber, SortBy = query.SortBy, OrderBy = query.OrderBy, TotalPages = (int)Math.Ceiling(all.Count / (double)query.PageSize), TotalItems = all.Count })); }
private List <SpecialistViewModel> GetFullSpecialists(GetSpecialistsList query) { var result = new List <SpecialistViewModel>(); var specialists = new List <Specialist>(); if (query.OrderBy == OrderBy.ASC) { switch (query.SortBy) { case SpecialistsSort.Price: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderBy(x => x.Price) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } case SpecialistsSort.Rating: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderBy(x => ReviewService.GetSpecialistRating(x)) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } case SpecialistsSort.Reviews: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderBy(x => SessionService.GetSpecialistSessions(x).Count) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } default: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderBy(x => x.Price) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } } } else { switch (query.SortBy) { case SpecialistsSort.Price: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderByDescending(x => x.Price) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } case SpecialistsSort.Rating: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderByDescending(x => ReviewService.GetSpecialistRating(x)) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } case SpecialistsSort.Reviews: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderByDescending(x => SessionService.GetSpecialistSessions(x).Count) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } default: { specialists.AddRange(SpecialistService.GetAll().ToList() .OrderByDescending(x => x.Price) .Skip((query.PageNumber - 1) * query.PageSize) .Take(query.PageSize) .ToList()); break; } } } specialists.ForEach(specialist => result.Add(GetFullSpecialist(specialist))); return(result); }