/// <summary> /// Общий обработчик для получения модели профиля пользователя. /// </summary> /// <param name="profile">Найденный профиль.</param> /// <param name="portalUser">Пользователь.</param> /// <param name="currentUserName">Имя пользователя для сопряжения.</param> /// <returns>Модель профиля пользователя.</returns> protected async Task <PortalUserProfileModel> ProcessProfile(PortalUserProfile profile, PortalUser portalUser, string currentUserName) { var fileRepository = StartEnumServer.Instance.GetRepository <IStoredFileRepository>(); var model = new PortalUserProfileModel(); var mapper = StartEnumServer.Instance.GetMapper(); mapper.Map(portalUser, model); if (profile != null) { mapper.Map(profile, model); if (profile.AvatarID != null) { model.AvatarUrl = await fileRepository.GetFileUrl(profile.AvatarID.Value); } } if (!string.IsNullOrWhiteSpace(currentUserName) && !string.Equals(portalUser.UserName, currentUserName, StringComparison.OrdinalIgnoreCase)) { var user = await StartEnumServer.Instance.GetRepository <IPortalUserRepository>() .GetByName(currentUserName); if (user != null) { model.IsFollowing = await StartEnumServer.Instance.GetRepository <IUserFollowingMapRepository>() .IsFollowing(user.PortalUserID, portalUser.PortalUserID); } } return(model); }
/// <summary> /// Реализация исполнения шага. /// </summary> /// <param name="state">Параметры шага.</param> /// <returns>Результат действия.</returns> public override async Task <StepResult> Execute(AccountRegisterParams state) { var logger = StartEnumServer.Instance.GetLogger(); logger.LogInfo <AccountRegisterStep>( $"Старт обработки регистрации пользователя {state.Request.UserName} из ip={state.Request.Ip}", new LoggerParameter("ClientIp", state.Request.Ip), new LoggerParameter("Login", state.Request.UserName), new LoggerParameter("Email", state.Request.Email)); if (!await CheckPassword(state)) { return(Success()); } if (!await CheckEmail(state)) { return(Success()); } var user = new Users.Auth.IdentityUser { UserName = state.Request.UserName, Email = state.Request.Email, FirstName = state.Request.FirstName, LastName = state.Request.LastName, MiddleName = state.Request.MiddleName }; if (string.IsNullOrWhiteSpace(user.FirstName)) { user.FirstName = String.Empty; } if (string.IsNullOrWhiteSpace(user.LastName)) { user.LastName = String.Empty; } if (!await CheckUser(state, user)) { return(Success()); } var result = await _userManager.CreateAsync(user, state.Request.Password); var iProfileRepository = StartEnumServer.Instance.GetRepository <IPortalUserProfileRespository>(); var profile = new PortalUserProfile(); profile.PortalUserID = user.PortalUserID; profile.StatusText = string.Empty; profile.PortalUserProfileID = Guid.NewGuid(); await iProfileRepository.SaveNew(profile); if (result.Succeeded) { state.Response = new AccountRegistredResponse { UserId = user.PortalUserID, UserName = state.Request.UserName }; } else { state.Response = new ErrorRegistrationResponse(string.Join(" ", result.Errors)); } return(Success()); }