Exemplo n.º 1
0
        public async Task <IActionResult> Register(Users user)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var result = new TaskResult <string>();
            var usr    = await _usersRepository.GetByUserNameAsync(user.UserName);

            if (usr == null)
            {
                var roleResult = await _rolesRepository.GetByNameAsync(RolesConstants.APPLICANT);

                if (!roleResult.Success)
                {
                    roleResult.AddErrorMessage($"El role {RolesConstants.APPLICANT} no existe");
                    return(BadRequest(roleResult));
                }

                await _usersRepository.CreateAsync(user);

                var createdSuccesfully = await _usersRepository.SaveAsync();

                if (!createdSuccesfully)
                {
                    result.AddErrorMessage($"No se pudo crear el usuario: {user.UserName}");
                    return(BadRequest(result));
                }

                var roleAdded = await _usersRepository.AddUserRoleAsync(roleResult.Data.Id, user.Id);

                if (!roleAdded)
                {
                    result.AddErrorMessage($"No se pudo agregar el rol {roleResult.Data.Name} al usuario {user.UserName}");
                    return(BadRequest(result));
                }

                result.Data = _jwtAuthenticationManager.Authenticate(user);
                return(Ok(result));
            }

            result.AddErrorMessage("El nombre de usuario ingresado ya se encuentra registrado");
            return(BadRequest(result));
        }