Пример #1
0
        public CreateUserResponse CreateUser(CreateUserRequest request)
        {
            var response = new CreateUserResponse();

            using (var context = new DatabaseContext())
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        var user = context.Users.FirstOrDefault(x => _encryptor.Decrypt(x.UserToken) == request.User.UserToken);

                        if (user == null)
                        {
                            context.Add(new UserRecord
                            {
                                UserToken = _encryptor.Encrypt(request.User.UserToken),
                                Username  = _encryptor.Encrypt(request.User.Username),
                                Picture   = _encryptor.Encrypt(request.User.Picture),
                                Active    = true
                            });

                            context.SaveChanges();
                            transaction.Commit();
                        }
                        else
                        {
                            if (user.Active)
                            {
                                throw new UserAlreadyExistsException("User has already been registered");
                            }

                            user.UserToken = _encryptor.Encrypt(request.User.UserToken);
                            user.Username  = _encryptor.Encrypt(request.User.Username);
                            user.Picture   = _encryptor.Encrypt(request.User.Picture);
                            user.Active    = true;

                            context.SaveChanges();
                            transaction.Commit();
                        }
                    }
                    catch (UserAlreadyExistsException exception)
                    {
                        transaction.Rollback();
                        response.AddError(new Error
                        {
                            Code             = ErrorCodes.UserAlreadyExists,
                            UserMessage      = "User with that UserToken already exists.",
                            TechnicalMessage = $"The following exception was thrown: {exception.Message}"
                        });
                    }
                    catch (Exception exception)
                    {
                        transaction.Rollback();
                        response.AddError(new Error
                        {
                            Code             = ErrorCodes.DatabaseError,
                            UserMessage      = "Something went wrong when creating your account. Please try again later.",
                            TechnicalMessage = $"The following exception was thrown: {exception.Message}"
                        });
                    }
                }

            return(response);
        }