Beispiel #1
0
        public IHttpActionResult UpdateCourse(int id, CourseCreator courseCreator)
        {
            coursesService        = new CoursesService();
            courseToExposeService = new CourseToExposeService();

            if (courseCreator == null)
            {
                return(NotFound());
            }

            if (courseCreator.SubjectIds.Count() > 5)
            {
                return(BadRequest());
            }


            // check if course exists; if it doesn't, send NotFound()
            Course courseToUpdate = coursesService.GetCourseByCourseId(id);

            if (courseToUpdate == null)
            {
                return(BadRequest());
            }

            // check if title changed and if so update it
            courseToUpdate = coursesService.UpdateTitle(id, courseCreator.Title);

            if (courseToUpdate == null)
            {
                return(BadRequest());
            }

            // list of subjects of course before update
            List <int> oldSubjectList = coursesService.GetCourseSubjectsIds(courseToUpdate);

            // new list of subjects
            List <int> newSubjectList = courseCreator.SubjectIds;

            // compare list of subjects
            List <int> subjectsToRemove = new List <int>();
            List <int> subjectsToAdd    = new List <int>();

            foreach (int oldSubject in oldSubjectList)
            {
                if (!newSubjectList.Contains(oldSubject))
                {
                    subjectsToRemove.Add(oldSubject);
                }
            }

            foreach (int newSubject in newSubjectList)
            {
                if (!oldSubjectList.Contains(newSubject))
                {
                    subjectsToAdd.Add(newSubject);
                }
            }

            // create courseSubjects to new subjects
            List <CourseSubject> newCourseSubjects = coursesService
                                                     .CreateCourseSubjectsByIdAndListOfSubjects(courseToUpdate.Id, subjectsToAdd);

            // remove course subjects
            coursesService.RemoveCourseSubjetcsByListOfSubjects(id, subjectsToRemove);

            // create List of subjects to expose
            List <Subject> subjectsToTrim = coursesService.GetSubjects(newSubjectList);

            List <SubjectToExpose> subjectsToExpose = coursesService.TrimSubjects(subjectsToTrim);

            // create Course to expose
            CourseToExpose courseToExpose = courseToExposeService
                                            .TrimUpdateCourse(id, courseCreator, subjectsToExpose);

            return(Ok(courseToExpose));
        }