public async Task <dynamic> GetWithAllInfoById(int id)
        {
            var course = await courseRepository.GetWithAllInfoById(id);

            if (course == null)
            {
                return(null);
            }


            dynamic dynamicCourse = new ExpandoObject();

            dynamicCourse.id                = course.Id;
            dynamicCourse.price             = course.Price;
            dynamicCourse.name              = course.Name;
            dynamicCourse.imageUrl          = course.ImageUrl;
            dynamicCourse.lastUpdated       = course.LastUpdated;
            dynamicCourse.statusId          = course.StatusId;
            dynamicCourse.status            = course.Status.Name;
            dynamicCourse.categoryId        = course.CategoryId;
            dynamicCourse.categoryName      = course.Category.Name;
            dynamicCourse.categoryTypeId    = course.Category.CategoryTypeId;
            dynamicCourse.categoryTypeName  = course.Category.CategoryType.Name;
            dynamicCourse.discount          = course.Discount;
            dynamicCourse.shortDiscription  = course.ShortDiscription;
            dynamicCourse.detailDiscription = course.DetailDiscription;
            dynamicCourse.lecturerId        = course.LecturerId;
            dynamicCourse.lecturer          = await userRepository.GetById(course.LecturerId);

            dynamicCourse.rating = await feedbackRepository.GetRatingByCourseId(course.Id);

            dynamicCourse.reviewerNumber = await feedbackRepository.GetReviewerNumberByCourseId(course.Id);

            dynamicCourse.registeredNumber = await studentCourseRepository.GetRegisteredNumberByCourseId(course.Id);

            dynamicCourse.viewNumber = await viewRepository.GetViewNumberByCourseId(course.Id);

            dynamicCourse.lectures = await lectureRepository.GetLectureListByCourseId(course.Id);

            return(dynamicCourse);
        }
        public async Task <object> GetFormattedCategoryTypeById(int id)
        {
            var categoryType = await categoryTypeRepository.GetWithAllInfoById(id);

            var bestSellerCourses = await studentCourseRepository.Get10BestSellerCourseIDsInMonth();

            var newestCourses = await courseRepository.Get10NewestCourseIds();

            var mostViewedCourses = await viewRepository.Get10MostViewedCourseIds();    //InMonth


            IList <dynamic> dynamicCategoryList = new List <dynamic>();

            for (int i = 0; i < categoryType.Categories.Count; i++)
            {
                var courses = await courseRepository.GetByCategoryId(categoryType.Categories[i].Id);

                categoryType.Categories[i].Courses = null;  //?

                IList <dynamic> dynamicCourseList = new List <dynamic>();

                for (int c = 0; c < courses.Count; c++)
                {
                    dynamic course = new ExpandoObject();
                    course.id          = courses[c].Id;
                    course.price       = courses[c].Price;
                    course.name        = courses[c].Name;
                    course.imageUrl    = courses[c].ImageUrl;
                    course.lastUpdated = courses[c].LastUpdated;
                    course.statusId    = courses[c].StatusId;
                    course.status      = courses[c].Status;
                    course.discount    = courses[c].Discount;
                    //course.ShortDiscription = courses[c].ShortDiscription;
                    //course.DetailDiscription = courses[c].DetailDiscription;
                    course.lecturerId = courses[c].LecturerId;
                    course.lecturer   = await userRepository.GetById(courses[c].LecturerId);

                    course.rating = await feedbackRepository.GetRatingByCourseId(courses[c].Id);

                    course.reviewerNumber = await feedbackRepository.GetReviewerNumberByCourseId(courses[c].Id);

                    course.registeredNumber = await studentCourseRepository.GetRegisteredNumberByCourseId(courses[c].Id);

                    bool flag = false;
                    for (int b = 0; b < bestSellerCourses.Count; b++)
                    {
                        if (bestSellerCourses[b].CourseId == courses[c].Id)
                        {
                            course.tag = "BestSeller";
                            flag       = true;
                            break;
                        }
                    }

                    if (flag == true)
                    {
                        dynamicCourseList.Add(course);
                        continue;
                    }

                    for (int n = 0; n < newestCourses.Count; n++)
                    {
                        if (newestCourses[n].CourseId == courses[c].Id)
                        {
                            course.tag = "Newest";
                            flag       = true;
                            break;
                        }
                    }

                    if (flag == true)
                    {
                        dynamicCourseList.Add(course);
                        continue;
                    }

                    for (int m = 0; m < mostViewedCourses.Count; m++)
                    {
                        if (mostViewedCourses[m].CourseId == courses[c].Id)
                        {
                            course.tag = "Trending";
                            flag       = true;
                            break;
                        }
                    }

                    dynamicCourseList.Add(course);
                }


                dynamicCategoryList.Add(dynamicCourseList);
            }

            return(new
            {
                categoryType = categoryType,
                dynamicCategoryList = dynamicCategoryList
            });
        }