public IActionResult GetCourses([FromQuery] int? categoryId)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();
            try
            {
                var courses = _courseRepository.GetCourses()
                                                .Where(c => c.DeletedAt == null 
                                                            && (c.Category.Id == categoryId || categoryId == null))
                                                .OrderBy(c => c.Title_EN)
                                                .ThenBy(c => c.Category)
                                                .ThenBy(c => c.CreatedAt);

                var response = new List<object>();

                foreach (var course in courses)
                {
                    var res = ResponseGenerator.GenerateCourseResponse(course, true);
                  
                    response.Add(res);
                }

                return Ok(new { courses = response });
            }
            catch 
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult GetDeletedCourses()
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();
            try
            {
                var courses = _courseRepository.GetCourses()
                                              .Where(c => c.DeletedAt != null);

                var response = new List<object>();

                foreach (var course in courses)
                {
                    var res = ResponseGenerator.GenerateCourseResponse(course,true);

                    response.Add(res);
                }

                return Ok(new { courses = response });
            }
            catch 
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult PublishCourse([FromBody] Course course, [FromQuery] string action)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();
            try
            {
                var crs = _courseRepository.FindById(course.Id);
                if (crs == null)
                    return NotFound();

                if (action == "publish")
                {
                    crs.IsPublished = true;
                    crs.PublishedAt = DateTime.Now;
                }
                else if (action == "unpublish")
                {
                    crs.IsPublished = false;
                    crs.PublishedAt = null;

                }
                var updatedCourse = _courseRepository.Update(crs);

                var response = ResponseGenerator.GenerateCourseResponse(updatedCourse, true);

                return Ok(new { updatedCourse = response });
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult GetMemberCourses([FromQuery] string userId)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var courses = new List <object>();

                var allCourses = _courseRepository.GetCourses();

                foreach (var course in allCourses)
                {
                    if (course.Class != null)
                    {
                        foreach (var member in course.Class.ClassUsers)
                        {
                            if (member.UserId == userId)
                            {
                                courses.Add(ResponseGenerator.GenerateCourseResponse(course, false));
                            }
                        }
                    }
                }

                return(Ok(new { courses }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult GetUserFavoriteCourses([FromQuery] string userId)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                if (string.IsNullOrEmpty(userId))
                {
                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }

                var favorites = _favoriteRepository.GetFavoritesByUserId(userId);
                var courses   = new List <object>();

                foreach (var fav in favorites)
                {
                    foreach (var course in _courseRepository.GetCourses())
                    {
                        if (fav.CourseId == course.Id)
                        {
                            courses.Add(ResponseGenerator.GenerateCourseResponse(course, false));
                        }
                    }
                }

                return(Ok(new { courses }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
예제 #6
0
        public IActionResult GetLatestCourses()
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var courses = _courseRepository.GetCourses()
                              .Where(c => c.DeletedAt == null && c.IsPublished == true)
                              .OrderByDescending(c => c.PublishedAt)
                              .ThenBy(c => c.Title_EN)
                              .ThenBy(c => c.Category.Title_EN)
                              .Take(5)
                              .ToList();

                var response = new List <object>();

                foreach (var course in courses)
                {
                    var res = ResponseGenerator.GenerateCourseResponse(course, false);

                    response.Add(res);
                }

                return(Ok(new { courses = response }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult UpdateCourse([FromBody] Course course)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();

            try
            {
                //var author = await _userManager.FindByIdAsync(course.Author.Id);
                var category = _categoryRepository.GetCategory(course.Category.Id);
                var newCourse = _courseRepository.FindById(course.Id);


                newCourse.Title_EN = course.Title_EN;
                newCourse.Title_FR = course.Title_FR ?? course.Title_EN;
                newCourse.Slug_EN = new SlugHelper().GenerateSlug(course.Title_EN);
                newCourse.Slug_FR = course.Title_FR  != null ?  new SlugHelper().GenerateSlug(course.Title_FR): new SlugHelper().GenerateSlug(course.Title_EN);
                newCourse.Description_EN = course.Description_EN;
                newCourse.Description_FR = course.Description_FR ?? course.Description_EN;
                newCourse.Prerequisites_EN = course.Prerequisites_EN;
                newCourse.Prerequisites_FR = course.Prerequisites_FR ?? course.Prerequisites_EN;
                newCourse.Duration = course.Duration;
                newCourse.ImagePath = course.ImagePath;
                newCourse.IsFree = course.IsFree == null ? false : course.IsFree.Value;
                newCourse.Price = course.Price;
                newCourse.IsPublished = course.IsPublished == null ? false : course.IsPublished.Value;
                newCourse.UpdatedBy = course.UpdatedBy;
                newCourse.UpdatedAt = DateTime.Now;
                newCourse.PublishedAt = null;
                //newCourse.Author = author;
                newCourse.Category = category;
                newCourse.Languages = course.Languages;
                newCourse.Level = course.Level;

                if (newCourse.IsPublished.Value == true)
                    newCourse.PublishedAt = DateTime.Now;

                var updatedCourse = _courseRepository.Update(newCourse);

                var response = ResponseGenerator.GenerateCourseResponse(updatedCourse, true);


                if (updatedCourse != null)
                {

                    return Ok(new { updatedCourse = response });
                }

                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
            catch 
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
예제 #8
0
        public IActionResult CreateClass([FromBody] Class cls)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                if (string.IsNullOrEmpty(cls.Name_EN) || cls.CourseId == null)
                {
                    errorMessages.Add(_translator.GetTranslation("VALIDATION.CLASSNAME_COURSEID_REQUIRED", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }

                if (_classRepository.IsExistsInCourse(cls.CourseId.Value))
                {
                    errorMessages.Add(_translator.GetTranslation("CLASSES.COURSE_HAS_CLASS", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }


                var course = _courseRepository.FindById(cls.CourseId.Value);
                if (course == null)
                {
                    return(NotFound());
                }

                var newCls = new Class()
                {
                    Id       = $"{course.Id.ToString()}-{Guid.NewGuid().ToString()}",
                    Name_EN  = cls.Name_EN,
                    Course   = course,
                    CourseId = course.Id
                };

                var createdClass = _classRepository.Create(newCls);

                if (createdClass == null)
                {
                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }

                return(Ok(new { course = ResponseGenerator.GenerateCourseResponse(course, true) }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult GetCourse([FromQuery] long id)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();
            try
            {
                var course = _courseRepository.FindById(id);

                var response = ResponseGenerator.GenerateCourseResponse(course, true);

                return Ok(new { course = response });
            }
            catch 
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult AddTagToCourse([FromBody] CourseTag courseTag, [FromQuery] string action)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();
            try
            {
                var course = _courseRepository.FindById(courseTag.CourseId);
                var courseTags = course.CourseTags;

                if (action == "add")
                {
                    var newTag = _tagRepository.FindById(courseTag.TagId);
                    var newCourseTag = new CourseTag()
                    {
                        CourseId = courseTag.CourseId,
                        Course = course,
                        TagId = courseTag.TagId,
                        Tag = newTag
                    };
                    courseTags.Add(newCourseTag);
                }
                else if(action == "remove")
                {
                    var currentCourseTag = courseTags
                                 .SingleOrDefault(x => x.TagId == courseTag.TagId && x.CourseId == courseTag.CourseId);

                    courseTags.Remove(currentCourseTag);
                }
                course.CourseTags = courseTags;

                var updatedCourse = _courseRepository.Update(course);

                var response = ResponseGenerator.GenerateCourseResponse(updatedCourse, true);

                return Ok(new { updatedCourse = response });
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult CreateSession([FromBody] Session session, [FromQuery] string action)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();

            try
            {
                var section = _sectionRepository.FindById(session.Section.Id);

                if (action == "add")
                {
                    var newSession = new Session()
                    {
                        Section = section,
                        Title_EN = session.Title_EN,
                        Slug_EN = new SlugHelper().GenerateSlug(session.Title_EN),
                        Order = session.Order,
                        Duration = session.Duration,
                        CreatedAt = DateTime.Now,
                        UpdatedAt = DateTime.Now,
                        CreatedBy = session.CreatedBy,
                        UpdatedBy = session.UpdatedBy
                    };

                    _sessionRepository.Create(newSession);
                }
                else if (action == "edit")
                {
                    var s = _sessionRepository.FindById(session.Id);
                    s.Title_EN = session.Title_EN;
                    s.Slug_EN = new SlugHelper().GenerateSlug(session.Title_EN);
                    s.Duration = session.Duration;
                    s.UpdatedAt = DateTime.Now;
                    s.UpdatedBy = session.UpdatedBy;

                    if (s.Order != session.Order)
                    {
                        var oldOrder = s.Order;

                        // Previous
                        var oldSession = section.Sessions.SingleOrDefault(s => s.Order == session.Order);
                        if (oldSession != null)
                        {
                            oldSession.Order = oldOrder;
                            var updatedOldSession = _sessionRepository.Update(oldSession);
                        }

                        // New
                        s.Order = session.Order;

                    }

                    _sessionRepository.Update(s);
                }
                var course = _courseRepository.FindById(session.Section.Course.Id);

                var response = ResponseGenerator.GenerateCourseResponse(course, true);

                return Ok(new { updatedCourse = response });
            }
            catch 
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
        }
        public IActionResult CreateCourse([FromBody] Course course)
        {
            var lang = Request.Headers["language"].ToString();
            var errorMessages = new List<string>();

            try
            {
                //var author = await _userManager.FindByIdAsync(course.Author.Id);
                var category = _categoryRepository.GetCategory(course.Category.Id);

                var slugHelper = new SlugHelper();
                var newCourse = new Course()
                {
                    Title_EN = course.Title_EN,
                    Title_FR = course.Title_FR ?? course.Title_EN,
                    Slug_EN = slugHelper.GenerateSlug(course.Title_EN),
                    Slug_FR = course.Title_FR != null ? slugHelper.GenerateSlug(course.Title_FR) : slugHelper.GenerateSlug(course.Title_EN),
                    Description_EN = course.Description_EN,
                    Description_FR = course.Description_FR ?? course.Description_EN,
                    Prerequisites_EN = course.Prerequisites_EN,
                    Prerequisites_FR = course.Prerequisites_FR ?? course.Prerequisites_EN,
                    Duration = course.Duration,
                    ImagePath = course.ImagePath,
                    IsFree = course.IsFree == null ? false : course.IsFree.Value,
                    Price = course.Price,
                    IsPublished = course.IsPublished == null ? false : course.IsPublished.Value,
                    CreatedBy = course.CreatedBy,
                    UpdatedBy = course.UpdatedBy,
                    CreatedAt = DateTime.Now,
                    UpdatedAt = DateTime.Now,
                    PublishedAt = null,
                    DeletedAt = null,
                    DeletedBy = null,
                    //Author = author,
                    Category = category,
                    Languages = course.Languages,
                    Level = course.Level,
                    Class = null
                };

                if (newCourse.IsPublished.Value == true)
                    newCourse.PublishedAt = DateTime.Now;

                var createdCourse = _courseRepository.Create(newCourse);

                var response = ResponseGenerator.GenerateCourseResponse(createdCourse, true);


                if (createdCourse != null)
                {

                    return Ok(new { createdCourse = response });
                }

                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new { errors = errorMessages });
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return BadRequest(new
                {
                    errors = errorMessages
                });
            }
        }
        public async Task <IActionResult> RateCourse([FromBody] CourseRating courseRating)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var user = await _userManager.FindByIdAsync(courseRating.UserId);

                var course = _courseRepository.FindById(courseRating.CourseId);

                if (user == null || course == null)
                {
                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }


                var allowedValues = new List <float>()
                {
                    1, 2, 3, 4, 5
                };

                if (!allowedValues.Contains(courseRating.Value))
                {
                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }

                var          rating = _courseRatingRepository.FindByUserCourse(user.Id, course.Id);
                CourseRating createdCourseRating;

                if (rating == null)
                {
                    var newRating = new CourseRating()
                    {
                        Course       = course,
                        CourseId     = course.Id,
                        User         = user,
                        UserId       = user.Id,
                        Value        = courseRating.Value,
                        RateDateTime = DateTime.Now
                    };

                    createdCourseRating = _courseRatingRepository.Create(newRating);
                }
                else
                {
                    rating.OldValue            = rating.Value;
                    rating.Value               = courseRating.Value;
                    rating.RateDateTimeUpdated = DateTime.Now;

                    createdCourseRating = _courseRatingRepository.Update(rating);
                }

                if (createdCourseRating == null)
                {
                    errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }

                //await _hubContext.Clients.All.SendAsync("SignalCourseRateReceived", ResponseGenerator.GenerateCourseResponse(course));

                return(Ok(new { course = ResponseGenerator.GenerateCourseResponse(course, false) }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }