Пример #1
0
        public PersonalUserCreatingConfirmation CreateUser(PersonalUser user, string password)
        {
            if (!CheckUniqueUsername(user.Username, false, null))
            {
                throw new UniqueValueViolationException("Username should be unique");
            }
            if (!CkeckUniqueEmail(user.Email))
            {
                throw new UniqueValueViolationException("Email should be unique");
            }
            if (!CheckCountry(user.CountryId))
            {
                throw new ForeignKeyConstraintViolationException("Foreign key constraint violated");
            }

            ////Dodavanje u userDbContext
            PersonalUserCreatingConfirmation persUserCreated = _personalUserRepository.CreateUser(user);

            _personalUserRepository.SaveChanges();

            //Dodavanje u IdentityUserDbContext
            string         username = string.Join("", user.Username.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));
            var            persuser = new AccountInfo(username, user.Email, persUserCreated.UserId);
            IdentityResult result   = _userManager.CreateAsync(persuser, password).Result;

            if (result.Succeeded)
            {
                _userManager.AddToRoleAsync(persuser, "Regular user").Wait();
            }
            else
            {
                _personalUserRepository.DeleteUser(persUserCreated.UserId);
            }
            return(persUserCreated);
        }
        public ActionResult <PersonalUserCreatingConfirmationDto> CreateUser([FromBody] PersonalUserCreatingDto personalUser)
        {
            try
            {
                PersonalUser persUserEntity = _mapper.Map <PersonalUser>(personalUser);

                PersonalUserCreatingConfirmation persUserCreated = _personalUsersService.CreateUser(persUserEntity, personalUser.Password);

                string location = _linkGenerator.GetPathByAction("GetUserById", "PersonalUser", new { userId = persUserCreated.UserId });

                return(Created(location, _mapper.Map <PersonalUserCreatingConfirmationDto>(persUserCreated)));
            }
            catch (Exception ex)
            {
                if (ex.GetType().IsAssignableFrom(typeof(ForeignKeyConstraintViolationException)))
                {
                    return(StatusCode(StatusCodes.Status409Conflict, ex.Message));
                }
                if (ex.GetType().IsAssignableFrom(typeof(UniqueValueViolationException)))
                {
                    return(StatusCode(StatusCodes.Status422UnprocessableEntity, ex.Message));
                }
                if (ex.GetBaseException().GetType() == typeof(SqlException))
                {
                    Int32 ErrorCode = ((SqlException)ex.InnerException).Number;
                    switch (ErrorCode)
                    {
                    case 2627:
                        break;

                    case 547:
                        return(StatusCode(StatusCodes.Status422UnprocessableEntity, ex.Message));

                    case 2601:
                        return(StatusCode(StatusCodes.Status409Conflict, ex.Message));

                    default:
                        return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
                    }
                }
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }