コード例 #1
0
        public async Task <IActionResult> PutAsync([FromRoute] long id, [FromBody] PutStudentViewModel putStudent)
        {
            if (!ModelState.IsValid)
            {
                return(new ObjectResult(new ApiDataResult {
                    Error = PutUserResultType.Wrong, Data = new { ModelState }
                })
                {
                    StatusCode = StatusCodes.Status422UnprocessableEntity
                });
            }

            if (id != putStudent.Id)
            {
                return(BadRequest(new ApiResult {
                    Error = PutUserResultType.Wrong
                }));
            }

            var result = await _userService.PutStudentAsync(putStudent);

            switch (result.Error)
            {
            case PutUserResultType.Forbiddance:
                return(new ObjectResult(result)
                {
                    StatusCode = StatusCodes.Status403Forbidden
                });

            case PutUserResultType.ConcurrencyException:
                return(BadRequest(result));

            case PutUserResultType.UserNotFound:
                return(NotFound(result));

            case PutUserResultType.Repeat:
                return(BadRequest(result));

            case PutUserResultType.Wrong:
                return(new ObjectResult(result)
                {
                    StatusCode = StatusCodes.Status422UnprocessableEntity
                });

            case PutUserResultType.Error:
                return(BadRequest(result));

            case PutUserResultType.Ok:
                return(Ok(result));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #2
0
        public async Task <ApiResult> PutStudentAsync(PutStudentViewModel putStudent)
        {
            var user = await _context.Users.Include(u => u.Role).SingleOrDefaultAsync(u => u.Id == putStudent.Id);

            if (user == null)
            {
                return new PutUserResult {
                           Error = PutUserResultType.UserNotFound
                }
            }
            ;

            var count = (await _context.Enrollments.Where(e => e.StudentId == long.Parse(user.LoginName)).ToListAsync())
                        .Count;

            if (count > 0)
            {
                return(new PutStudentResult {
                    Error = PutUserResultType.Forbiddance
                });
            }

            if (putStudent.Password != null)
            {
                putStudent.Password = GetRandomPassword();
                user.PasswordHash   = _passwordHasher.HashPassword(user, putStudent.Password);
            }
            else
            {
                if (user.LoginName != putStudent.LoginName)
                {
                    var uu = await _context.Users.SingleOrDefaultAsync(u => u.LoginName == putStudent.LoginName);

                    if (uu != null)
                    {
                        return(new PutStudentResult {
                            Error = PutUserResultType.Repeat
                        });
                    }
                }

                user.LoginName = putStudent.LoginName;
                user.UserName  = putStudent.UserName;

                var student = await _context.Students.FindAsync(long.Parse(user.LoginName));

                student.Group = putStudent.Group;

                _context.Entry(student).State = EntityState.Modified;
            }

            _context.Entry(user).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();

                return(new PutStudentResult {
                    Error = PutUserResultType.Ok, Data = putStudent
                });
            }
            catch (DbUpdateConcurrencyException)
            {
                return(new PutStudentResult {
                    Error = PutUserResultType.ConcurrencyException
                });
            }
        }