Пример #1
0
        public UserResponse SaveUser(UserRequest request)
        {
            Logger.Info("SaveUser(): Saving user {0}", LocalStore.CurrentUser.UserName);
            var response = new UserResponse();

            User             user      = request.User;
            LoginInformation loginInfo = user.LoginInformations;

            loginInfo.AccessedDate = DateTime.Today;

            var isUserIdExists      = DbContext.Users.Any(x => x.UserId == user.UserId);
            var isUserNameExists    = DbContext.Users.Any(x => x.LoginInformations.Username == user.LoginInformations.Username);
            var isUserEmailIdExists = DbContext.Users.Any(x => x.Email == user.Email);
            var isSuperUserExists   = request.User.LoginInformations.UserType == UserType.SuperUser;

            if (user.UserId == 0)
            {
                if (isUserIdExists)
                {
                    Logger.Warn("SaveUser(): User Id {0} already exists", LocalStore.CurrentUser.UserId);
                    response.AddValidationError("UserId", "User Id already exists!");
                }
                else if (isUserNameExists)
                {
                    Logger.Warn("SaveUser(): Username {0} already exists", LocalStore.CurrentUser.UserName);
                    response.AddValidationError("Username", "User name already exists!");
                }

                else if (isUserEmailIdExists)
                {
                    Logger.Warn("SaveUser(): Email {0} already exists", LocalStore.CurrentUser.Email);
                    response.AddValidationError("Email", "Email Id already exists!");
                }

                else if (isSuperUserExists)
                {
                    Logger.Fatal("SaveUser(): System cannot have multiple Superuser");
                    throw new InvalidOperationException("System cannot have multiple Superuser");
                }
            }
            else
            {
                // LoginInformation is a saparate entity and need query again for finding older values
                var originalloginInfo = GetOriginalRecord(loginInfo);
                var originaluser      = GetOriginalRecord(user);

                if (user.LoginInformations.Username != (String)originalloginInfo["Username"] && isUserNameExists)
                {
                    Logger.Warn("SaveUser(): Username {0} already exists", LocalStore.CurrentUser.UserName);
                    response.AddValidationError("Username", "User name already exists!");
                }

                if (user.Email != (String)originaluser["Email"] && isUserEmailIdExists)
                {
                    Logger.Warn("SaveUser(): Email {0} already exists", LocalStore.CurrentUser.Email);
                    response.AddValidationError("Email", "Email Id already exists!");
                }
            }

            if (response.IsValid == false)
            {
                return(response);
            }

            user.AccessedBy   = LocalStore.CurrentUser.UserId;
            user.AccessedDate = DateTime.Now;
            if (user.UserId == 0)
            {
                DbContext.Users.AddObject(user);
            }
            // Save user
            DbContext.SaveChanges();
            Logger.Info("SaveUser(): User {0} Saved", LocalStore.CurrentUser.UserId);

            return(response);
        }