Exemple #1
0
        public async Task <IActionResult> CreateAssignment(int creatorId, [FromBody] AssignmentForCreationDto assignmentForCreationDto)
        {
            var assignmentCreator = await _repo.GetUser(creatorId);

            if (assignmentCreator.Id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            assignmentForCreationDto.CreatedBy = assignmentCreator;
            var assignment = _mapper.Map <Assignment>(assignmentForCreationDto);

            if (assignment.Assigned)
            {
                assignment.DateAssigned = DateTime.Now;
            }

            var students = _repo.GetStudents(assignmentForCreationDto.StudentLevel);

            _repo.Add(assignment);

            foreach (var student in students.Result)
            {
                var userAssignment = new UserAssignment()
                {
                    UserId       = student.Id,
                    AssignmentId = assignment.Id,
                    Completed    = false
                };

                if (!student.UserAssignments.Contains(userAssignment))
                {
                    _repo.Add(userAssignment);
                }
            }

            if (await _repo.SaveAll())
            {
                // _repo.SqlCmdHelper("SET IDENTITY_INSERT dbo.UserAssignments OFF");
                var assignmentToReturn = _mapper.Map <AssignmentToReturnDto>(assignment);
                return(CreatedAtRoute("GetAssignment", new { id = assignment.Id }, assignmentToReturn));
            }

            throw new Exception("Creating the assignment failed on save");
        }