public IHttpActionResult PutAssignment(int id, AssignmentDetailTeacherDTO assignmentDTO)
        {
            Authorize auth           = new Authorize();
            User      authorizedUser = auth.GetAuthorizedUser(Request.Headers.GetCookies("user").FirstOrDefault());

            if (authorizedUser == null || authorizedUser.GetTeacher() == null)
            {
                return(Unauthorized());
            }
            Assignment assignment = db.Assignments.Find(id);

            if (assignmentDTO == null || assignment == null || assignment.Course == null || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            Course course = assignment.Course;

            if (!"Teacher".Equals(auth.GetAccessRole(authorizedUser, course)))
            {
                return(Unauthorized());
            }
            if (!assignmentDTO.Validate(assignment, null))
            {
                return(BadRequest());
            }
            assignmentDTO.Update(assignment, null);
            string error = db.Update(assignment, Modified);

            if (error != null)
            {
                return(BadRequest(error));
            }
            return(Redirect("https://" + Request.RequestUri.Host + ":" + Request.RequestUri.Port + "/Assignments/" + assignment.Id));
        }
        public IHttpActionResult PostAssignment(AssignmentDetailTeacherDTO assignmentDTO)
        {
            Authorize auth           = new Authorize();
            User      authorizedUser = auth.GetAuthorizedUser(Request.Headers.GetCookies("user").FirstOrDefault());

            if (authorizedUser == null || authorizedUser.GetTeacher() == null)
            {
                return(Unauthorized());
            }
            Course course = db.Courses.Find(assignmentDTO.NewCourseId);

            if (!"Teacher".Equals(auth.GetAccessRole(authorizedUser, course)))
            {
                return(Unauthorized());
            }
            Assignment derived = null;

            if (assignmentDTO.NewIsDerived)
            {
                if (assignmentDTO.NewDerivedFromName == null)
                {
                    return(BadRequest());
                }
                foreach (Assignment otherAssignment in course.Assignments)
                {
                    if (assignmentDTO.NewDerivedFromName.Equals(otherAssignment.Name))
                    {
                        derived = otherAssignment;
                        break;
                    }
                }
                if (derived == null)
                {
                    return(BadRequest());
                }
            }
            if (!ModelState.IsValid || course == null || !assignmentDTO.Validate(null, derived))
            {
                return(BadRequest());
            }
            ICollection <object> objects = assignmentDTO.Create(derived);
            string error = db.UpdateAll(objects, Added);

            if (error != null)
            {
                return(BadRequest(error));
            }
            return(Redirect("https://" + Request.RequestUri.Host + ":" + Request.RequestUri.Port + "/Courses/" + course.Id));
        }