public Tuple <bool, string> AddOrUpdateAuthentication(AuthenticationModel authenticationModel, StateOperation stateOperation) { try { if (stateOperation == StateOperation.درج) { var authentication = _authenticationRepository.Find(x => x.IdentityCode == authenticationModel.IdentityCode); if (authentication != null) { return(new Tuple <bool, string>(false, "خطا در انجام عملیات : کد شناسایی مورد نظر تکراری می باشد")); } Authentication newAuthentication = new Authentication { AuthenticationType = authenticationModel.AuthenticationType, IdentityCode = authenticationModel.IdentityCode, CentralOrganizationId = authenticationModel.CentralOrganizationId, BranchProvinceId = authenticationModel.BranchProvinceId, UniversityId = authenticationModel.UniversityId }; _authenticationRepository.Add(newAuthentication); } else { if (_authenticationRepository.Contains(x => x.Id != authenticationModel.Id && x.IdentityCode == authenticationModel.IdentityCode)) { return(new Tuple <bool, string>(false, "خطا در انجام عملیات : کد شناسایی مورد نظر تکراری می باشد")); } var authentication = _authenticationRepository.Find(x => x.Id == authenticationModel.Id); if (authentication == null) { return(new Tuple <bool, string>(false, "خطا در انجام عملیات : رکورد مورد نظر یافت نشد")); } authentication.IdentityCode = authenticationModel.IdentityCode; authentication.AuthenticationType = authenticationModel.AuthenticationType; //authentication.CentralOrganizationId = authenticationModel.CentralOrganizationId; //authentication.BranchProvinceId = authenticationModel.BranchProvinceId; //authentication.UniversityId = authenticationModel.UniversityId; _authenticationRepository.Update(authentication); } _unitOfWork.SaveChanges(); return(new Tuple <bool, string>(true, "عملیات ثبت شد")); } catch (Exception ex) { return(new Tuple <bool, string>(false, "خطا در انجام عملیات")); } }
/// <summary> /// رکورد شخص و کاربر و پروفایل و دانشجو یا پرسنل ذخیره شده و همچنین سطح مربوط به تعریف شخص هم مشخص شده است /// </summary> /// <param name="identificationCode"></param> /// <param name="email"></param> /// <param name="password"></param> /// <param name="nationalCode"></param> /// <param name="mobile"></param> /// <param name="name"></param> /// <param name="family"></param> /// <returns></returns> public virtual async Task <Tuple <bool, string, string, User> > AddUser(string identificationCode, string email, string password, string name, string family, string nationalCode, string mobile) { try { using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { //_unitOfWork.BeginTransaction(); //var hasher = new PasswordHasher(); //واکشی احراز هویت مربوط به کد شناسایی var authentication = _authenticationRepository.Where(a => a.IdentityCode == identificationCode) .Include(i => i.Users).FirstOrDefault(); if (authentication == null) { return(new Tuple <bool, string, string, User>(false, "اطلاعات پایه کاربری وجود ندارد!", "", null)); } if (authentication.Users.Any()) { return(new Tuple <bool, string, string, User>(false, "اطلاعات پایه کاربری قبلا استفاده شده است!", "", null)); } //ایجاد پروفایل var profile = new Profile { Name = name, Family = family, NationalCode = nationalCode, Mobile = mobile }; ////رکورد مربوط به دانشجو یا پرسنل //switch (authentication.AuthenticationType) //{ // case AuthenticationType.Personel: // Personel personel = new Personel(); // person.Personel = personel; // break; // case AuthenticationType.Student: // Student student = new Student(); // person.Student = student; // break; //} //انتساب سطح تعریف شده مربوط به جدول احراز هویت به جدول شخص و ایجاد شخص var person = new Person { Profile = profile }; switch (authentication.AuthenticationType) { case AuthenticationType.AdminCentral: person.CentralOrganizationId = authentication.CentralOrganizationId; break; case AuthenticationType.AdminBranch: person.BranchProvinceId = authentication.BranchProvinceId; break; default: person.UniversityId = authentication.UniversityId; break; } _personRepository.Add(person); // ویرایش احراز هوییت بخش پر کردن پروفایل var objectauthentication = _authenticationRepository.Find(p => p.IdentityCode == identificationCode); objectauthentication.ExistinProfile = true; // _authenticationRepository.Update(authentication); _unitOfWork.SaveChanges(); //ایجاد کاربر var user = new User { Id = person.Id, AuthenticationId = authentication.Id, Email = email, UserName = email //PasswordHash = hasher.HashPassword(registerUser.Password) }; //PasswordHasher hashe = new PasswordHasher(); var result = await _userManager.CreateAsync(user, password); if (!result.Succeeded) { return(new Tuple <bool, string, string, User>(false, "خطا در ثبت نام کاربر!", "", null)); } var code = await _userManager.GenerateEmailConfirmationTokenAsync(user.Id); //_unitOfWork.CommitTransaction(); scope.Complete(); return(new Tuple <bool, string, string, User>(true, "", code, user)); //_unitOfWork.Rollback(); } } catch (Exception ex) { //_unitOfWork.Rollback(); return(new Tuple <bool, string, string, User>(false, "خطا در ثبت نام کاربر!", "", null)); } }