Example #1
0
        public async Task <UpdateUserResponse> UpdateUser(UpdateUserRequest request)
        {
            var session = await _sessionService.GetAuthenticatedSession();

            var response = new UpdateUserResponse();

            var duplicateResponse = await _accountService.DuplicateUserCheck(new DuplicateUserCheckRequest()
            {
                EmailAddress = request.EmailAddress,
                Username     = request.Username,
                MobileNumber = request.MobileNumber,
                UserId       = request.Id
            });

            if (duplicateResponse.Notifications.HasErrors)
            {
                response.Notifications.Add(duplicateResponse.Notifications);
                return(response);
            }

            using (var uow = _uowFactory.GetUnitOfWork())
            {
                var user = await uow.UserRepo.GetUserById(new Infrastructure.Repositories.UserRepo.Models.GetUserByIdRequest()
                {
                    Id = request.Id
                });

                var dbRequest = new Infrastructure.Repositories.UserRepo.Models.UpdateUserRequest()
                {
                    Id                     = request.Id,
                    Username               = request.Username,
                    First_Name             = request.FirstName,
                    Last_Name              = request.LastName,
                    Mobile_Number          = request.MobileNumber,
                    Email_Address          = request.EmailAddress,
                    Password_Hash          = user.Password_Hash,
                    Registration_Confirmed = request.RegistrationConfirmed,
                    Updated_By             = session.User.Entity.Id,
                };

                if (!string.IsNullOrEmpty(request.Password))
                {
                    dbRequest.Password_Hash = PasswordHelper.HashPassword(request.Password);
                }

                await uow.UserRepo.UpdateUser(dbRequest);

                uow.Commit();
            }

            await CreateOrDeleteUserRoles(request.RoleIds, request.Id, session.User.Entity.Id);

            await _sessionService.WriteSessionLogEvent(new Models.ServiceModels.Session.CreateSessionLogEventRequest()
            {
                EventKey = SessionEventKeys.UserUpdated
            });

            response.Notifications.Add($"User {request.Username} has been updated", NotificationTypeEnum.Success);
            return(response);
        }
        public async Task <UpdateProfileResponse> UpdateProfile(UpdateProfileRequest request)
        {
            var response = new UpdateProfileResponse();
            var session  = await _sessionService.GetAuthenticatedSession();

            var dbRequest = new Infrastructure.Repositories.UserRepo.Models.UpdateUserRequest()
            {
                Id                     = session.User.Entity.Id,
                Username               = request.Username,
                Email_Address          = request.EmailAddress,
                First_Name             = request.FirstName,
                Last_Name              = request.LastName,
                Mobile_Number          = request.MobileNumber,
                Password_Hash          = session.User.Entity.Password_Hash,
                Registration_Confirmed = session.User.Entity.Registration_Confirmed,
                Updated_By             = session.User.Entity.Id
            };

            if (!string.IsNullOrEmpty(request.Password))
            {
                dbRequest.Password_Hash = PasswordHelper.HashPassword(request.Password);
            }

            using (var uow = _uowFactory.GetUnitOfWork())
            {
                await uow.UserRepo.UpdateUser(dbRequest);

                uow.Commit();
            }

            // rehydrate user in session due to profile updating
            await _sessionService.RehydrateSession();

            await _sessionService.WriteSessionLogEvent(new Models.ServiceModels.Session.CreateSessionLogEventRequest()
            {
                EventKey = SessionEventKeys.UserUpdatedProfile
            });

            response.Notifications.Add("Profile updated successfully", NotificationTypeEnum.Success);
            return(response);
        }