diff --git a/AccountManagement.Application.Contracts/Account/CreateAccount.cs b/AccountManagement.Application.Contracts/Account/CreateAccount.cs index 9636fced..87c9e150 100644 --- a/AccountManagement.Application.Contracts/Account/CreateAccount.cs +++ b/AccountManagement.Application.Contracts/Account/CreateAccount.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using AccountManagement.Application.Contracts.Role; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Rendering; namespace AccountManagement.Application.Contracts.Account; @@ -40,4 +41,15 @@ public class CreateAccount /// آیا کاربر در پروگرام منیجر فعالیت مبکند؟ /// public bool IsProgramManagerUser { get; set; } + /// + /// لیست نقش های پروگرام منیجر + /// + public List UserRoles { get; set; } + + /// + /// لیست نقشهای موجود در پروگرام منیجر + /// + public SelectList RoleList { get; set; } + + } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Account/EditAccount.cs b/AccountManagement.Application.Contracts/Account/EditAccount.cs index b322c34b..41afe474 100644 --- a/AccountManagement.Application.Contracts/Account/EditAccount.cs +++ b/AccountManagement.Application.Contracts/Account/EditAccount.cs @@ -1,6 +1,9 @@ -namespace AccountManagement.Application.Contracts.Account; +using System.Collections.Generic; + +namespace AccountManagement.Application.Contracts.Account; public class EditAccount : CreateAccount { public long Id { get; set; } + } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/ProgramManagerApiResult/ApiResponse.cs b/AccountManagement.Application.Contracts/ProgramManagerApiResult/ApiResponse.cs index 99d86f01..b5c7afc4 100644 --- a/AccountManagement.Application.Contracts/ProgramManagerApiResult/ApiResponse.cs +++ b/AccountManagement.Application.Contracts/ProgramManagerApiResult/ApiResponse.cs @@ -5,5 +5,7 @@ public record ApiResponse public bool isSuccess { get; set; } public string errorMessage { get; set; } + + public ErrorType ErrorType { get; set; } } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/ProgramManagerApiResult/CreateProgramManagerUser.cs b/AccountManagement.Application.Contracts/ProgramManagerApiResult/CreateProgramManagerUser.cs index 7f471962..64b3dfc6 100644 --- a/AccountManagement.Application.Contracts/ProgramManagerApiResult/CreateProgramManagerUser.cs +++ b/AccountManagement.Application.Contracts/ProgramManagerApiResult/CreateProgramManagerUser.cs @@ -1,3 +1,7 @@ -namespace AccountManagement.Application.Contracts.ProgramManagerApiResult; +using System.Collections.Generic; -public record CreateProgramManagerUser(string FullName, string UserName, string Password, string Mobile, string Email, long? AccountId); \ No newline at end of file +namespace AccountManagement.Application.Contracts.ProgramManagerApiResult; + +public record CreateProgramManagerUser(string FullName, string UserName, string Password, string Mobile, string Email, long? AccountId, List Roles); + +public record EditUserCommand(string FullName, string UserName, string Mobile, long AccountId, List Roles, bool IsActive); \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/ProgramManagerApiResult/SingleUserResponseResult.cs b/AccountManagement.Application.Contracts/ProgramManagerApiResult/SingleUserResponseResult.cs index 2ce9788f..00a28e67 100644 --- a/AccountManagement.Application.Contracts/ProgramManagerApiResult/SingleUserResponseResult.cs +++ b/AccountManagement.Application.Contracts/ProgramManagerApiResult/SingleUserResponseResult.cs @@ -1,4 +1,5 @@ -using static System.Runtime.InteropServices.JavaScript.JSType; +using System.Collections.Generic; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace AccountManagement.Application.Contracts.ProgramManagerApiResult; @@ -49,4 +50,6 @@ public record SingleUserData /// ای دی اکانت کاربر در گزارشگیر /// public long? accountId { get; set; } + + public List Roles { get; set; } } diff --git a/AccountManagement.Application/AccountApplication.cs b/AccountManagement.Application/AccountApplication.cs index 8e51316b..42185fe5 100644 --- a/AccountManagement.Application/AccountApplication.cs +++ b/AccountManagement.Application/AccountApplication.cs @@ -46,7 +46,7 @@ public class AccountApplication : IAccountApplication private readonly ISmsService _smsService; private readonly ICameraAccountRepository _cameraAccountRepository; private readonly IPositionRepository _positionRepository; - private readonly IAccountLeftworkRepository _accountLeftworkRepository; + private readonly IAccountLeftworkRepository _accountLeftworkRepository; private readonly IWorkshopRepository _workshopRepository; private readonly ISubAccountRepository _subAccountRepository; private readonly ISubAccountRoleRepository _subAccountRoleRepository; @@ -72,7 +72,7 @@ public class AccountApplication : IAccountApplication _fileUploader = fileUploader; _passwordHasher = passwordHasher; _accountRepository = accountRepository; - + } public OperationResult EditClient(EditClientAccount command) @@ -101,7 +101,7 @@ public class AccountApplication : IAccountApplication var path = $"profilePhotos"; var picturePath = _fileUploader.Upload(command.ProfilePhoto, path); - editAccount.EditClient(command.Fullname,command.Username,command.Mobile,picturePath,command.Email,command.NationalCode); + editAccount.EditClient(command.Fullname, command.Username, command.Mobile, picturePath, command.Email, command.NationalCode); _accountRepository.SaveChanges(); return opreation.Succcedded(); } @@ -145,15 +145,15 @@ public class AccountApplication : IAccountApplication var picturePath = ""; if (_fileUploader != null) { - picturePath = _fileUploader.Upload(command.ProfilePhoto, path); - + picturePath = _fileUploader.Upload(command.ProfilePhoto, path); + } var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId, picturePath, roleName.Name, "true", "false"); _unitOfWork.BeginAccountContext(); - + _accountRepository.Create(account); _accountRepository.SaveChanges(); @@ -165,10 +165,11 @@ public class AccountApplication : IAccountApplication password, command.Mobile, command.Email, - account.id + account.id, + command.UserRoles ); - var url = "api/user"; + var url = "api/user/create"; var key = SecretKeys.ProgramManagerInternalApi; var response = InternalApiCaller.PostAsync( @@ -204,8 +205,8 @@ public class AccountApplication : IAccountApplication return opreation.Failed("پر کردن تمامی فیلدها الزامی است"); if (_accountRepository.Exists(x => x.Username == command.Username)) return opreation.Failed("نام کاربری تکراری است"); - if (_accountRepository.Exists(x => x.Mobile == command.Mobile && x.IsActiveString =="true")) - + if (_accountRepository.Exists(x => x.Mobile == command.Mobile && x.IsActiveString == "true")) + return opreation.Failed("مقادیر وارد شده تکراری است"); //var nationalCodeValidation = command.NationalCode.NationalCodeValid(); @@ -222,11 +223,11 @@ public class AccountApplication : IAccountApplication // break; //} var password = _passwordHasher.Hash(command.Password); - var register =new Account(command.Fullname,command.Username, password, command.Mobile, command.NationalCode); + var register = new Account(command.Fullname, command.Username, password, command.Mobile, command.NationalCode); _accountRepository.Create(register); _accountRepository.SaveChanges(); - return opreation.Succcedded(register.id,message: "ثبت نام شما با موفقیت انجام شد"); + return opreation.Succcedded(register.id, message: "ثبت نام شما با موفقیت انجام شد"); } public OperationResult Edit(EditAccount command) @@ -243,8 +244,97 @@ public class AccountApplication : IAccountApplication var roleName = _roleRepository.GetDetails(command.RoleId); var path = $"profilePhotos"; var picturePath = _fileUploader.Upload(command.ProfilePhoto, path); + _unitOfWork.BeginAccountContext(); account.Edit(command.Fullname, command.Username, command.Mobile, command.RoleId, picturePath, roleName.Name); _accountRepository.SaveChanges(); + var key = SecretKeys.ProgramManagerInternalApi; + + var apiResult = InternalApiCaller.GetAsync( + $"api/user/{account.id}", + key + ); + + + + + //اگر کاربر در پروگرام منیجر قبلا ایجاد شده + if (apiResult.Success && apiResult.Result.Data.accountId == account.id) + { + if (!command.UserRoles.Any()) + return operation.Failed("حداقل یک نقش باید انتخاب شود"); + + var parameters = new EditUserCommand( + command.Fullname, + command.Username, + command.Mobile, + account.id, + command.UserRoles, + command.IsProgramManagerUser + ); + var url = "api/user/edit"; + var response = InternalApiCaller.PostAsync( + url, + key, + parameters + ); + + if (!response.Success) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Error); + + } + + if (!response.Result.isSuccess) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Error); + } + + } + else //اگر کاربر قبلا ایجاد نشده + { + //اگر تیک فعالیت در پروگرام منیجر روشن بود + if (command.IsProgramManagerUser) + { + if (!command.UserRoles.Any()) + return operation.Failed("حداقل یک نقش باید انتخاب شود"); + var parameters = new CreateProgramManagerUser( + command.Fullname, + command.Username, + account.Password, + command.Mobile, + command.Email, + account.id, + command.UserRoles + ); + + var url = "api/user/Create"; + + + var response = InternalApiCaller.PostAsync( + url, + key, + parameters + ); + + if (!response.Success) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Error); + + } + + if (!response.Result.isSuccess) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Error); + } + } + + } + + _unitOfWork.CommitAccountContext(); return operation.Succcedded(); } @@ -259,18 +349,18 @@ public class AccountApplication : IAccountApplication long idAutoriz = 0; var operation = new OperationResult(); if (string.IsNullOrWhiteSpace(command.Password)) - return operation.Failed(ApplicationMessages.EmptyPassword); + return operation.Failed(ApplicationMessages.EmptyPassword); if (string.IsNullOrWhiteSpace(command.Username)) - return operation.Failed(ApplicationMessages.EmptyUsername); + return operation.Failed(ApplicationMessages.EmptyUsername); - var account = _accountRepository.GetBy(command.Username); + var account = _accountRepository.GetBy(command.Username); var cameraAccount = _cameraAccountRepository.GetBy(command.Username); - SubAccount subAccount = _subAccountRepository.GetBy(command.Username); - if (account == null && cameraAccount == null && subAccount == null) - return operation.Failed(ApplicationMessages.WrongUserPass); + SubAccount subAccount = _subAccountRepository.GetBy(command.Username); + if (account == null && cameraAccount == null && subAccount == null) + return operation.Failed(ApplicationMessages.WrongUserPass); - if (account != null) + if (account != null) { (bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(account.Password, command.Password); if (!result.Verified) @@ -294,8 +384,8 @@ public class AccountApplication : IAccountApplication if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && account.IsActiveString == "true") { - var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); - authViewModel.Permissions = clientPermissions; + var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); + authViewModel.Permissions = clientPermissions; var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim { PersonnelCount = x.PersonnelCount, @@ -304,14 +394,14 @@ public class AccountApplication : IAccountApplication Slug = _passwordHasher.SlugHasher(x.Id) }).OrderByDescending(x => x.PersonnelCount).ToList(); authViewModel.WorkshopList = workshopList; - if (workshopList.Any()) - { - var workshop = workshopList.First(); - authViewModel.WorkshopName = workshop.Name; - authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); + if (workshopList.Any()) + { + var workshop = workshopList.First(); + authViewModel.WorkshopName = workshop.Name; + authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); authViewModel.WorkshopId = workshop.Id; } - } + } _authHelper.Signin(authViewModel); @@ -330,7 +420,7 @@ public class AccountApplication : IAccountApplication var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, - cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId,cameraAccount.IsActiveSting); + cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting); if (cameraAccount.IsActiveSting == "true") { _authHelper.CameraSignIn(authViewModel); @@ -340,41 +430,41 @@ public class AccountApplication : IAccountApplication { idAutoriz = 0; } - + } - if (subAccount != null) - { - (bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(subAccount.Password, command.Password); - if (!result.Verified) - return operation.Failed(ApplicationMessages.WrongUserPass); - var role = _subAccountRoleRepository.Get(subAccount.SubAccountRoleId); + if (subAccount != null) + { + (bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(subAccount.Password, command.Password); + if (!result.Verified) + return operation.Failed(ApplicationMessages.WrongUserPass); + var role = _subAccountRoleRepository.Get(subAccount.SubAccountRoleId); - var permissions = role.RolePermissions.Select(x => x.PermissionCode).ToList(); - var authViewModel = new AuthViewModel(subAccount.AccountId, subAccount.SubAccountRoleId, subAccount.FullName - , subAccount.Username, subAccount.PhoneNumber, "", permissions, role.Title, "false", - "true", 0, subAccount.id); - var workshopList = _workshopSubAccountRepository.GetWorkshopsBySubAccountId(subAccount.id); - authViewModel.WorkshopList = workshopList.Select(x => new WorkshopClaim() - { - Slug = _passwordHasher.SlugHasher(x.WorkshopId), - Name = x.WorkshopName, - PersonnelCount = x.PersonnelCount, - Id = x.WorkshopId - }).ToList(); + var permissions = role.RolePermissions.Select(x => x.PermissionCode).ToList(); + var authViewModel = new AuthViewModel(subAccount.AccountId, subAccount.SubAccountRoleId, subAccount.FullName + , subAccount.Username, subAccount.PhoneNumber, "", permissions, role.Title, "false", + "true", 0, subAccount.id); + var workshopList = _workshopSubAccountRepository.GetWorkshopsBySubAccountId(subAccount.id); + authViewModel.WorkshopList = workshopList.Select(x => new WorkshopClaim() + { + Slug = _passwordHasher.SlugHasher(x.WorkshopId), + Name = x.WorkshopName, + PersonnelCount = x.PersonnelCount, + Id = x.WorkshopId + }).ToList(); - if (workshopList.Any()) - { - var workshop = workshopList.First(); - authViewModel.WorkshopName = workshop.WorkshopName; - authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId); + if (workshopList.Any()) + { + var workshop = workshopList.First(); + authViewModel.WorkshopName = workshop.WorkshopName; + authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId); authViewModel.WorkshopId = workshop.WorkshopId; - } - _authHelper.Signin(authViewModel); - idAutoriz = 2; - } + } + _authHelper.Signin(authViewModel); + idAutoriz = 2; + } - return operation.Succcedded(idAutoriz); + return operation.Succcedded(idAutoriz); } public OperationResult LoginWithMobile(long id) { @@ -405,24 +495,24 @@ public class AccountApplication : IAccountApplication if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && account.IsActiveString == "true") { - var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); - authViewModel.Permissions = clientPermissions; - var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim - { - PersonnelCount = x.PersonnelCount, - Id = x.Id, - Name = x.WorkshopFullName, - Slug = _passwordHasher.SlugHasher(x.Id) - }).OrderByDescending(x => x.PersonnelCount).ToList(); - authViewModel.WorkshopList = workshopList; - if (workshopList.Any()) - { - var workshop = workshopList.First(); - authViewModel.WorkshopName = workshop.Name; - authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); + var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); + authViewModel.Permissions = clientPermissions; + var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim + { + PersonnelCount = x.PersonnelCount, + Id = x.Id, + Name = x.WorkshopFullName, + Slug = _passwordHasher.SlugHasher(x.Id) + }).OrderByDescending(x => x.PersonnelCount).ToList(); + authViewModel.WorkshopList = workshopList; + if (workshopList.Any()) + { + var workshop = workshopList.First(); + authViewModel.WorkshopName = workshop.Name; + authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); authViewModel.WorkshopId = workshop.Id; - } - } + } + } _authHelper.Signin(authViewModel); long idAutoriz = 0; @@ -478,7 +568,7 @@ public class AccountApplication : IAccountApplication return _accountRepository.GetByUserNameAndId(id, username); } - public async Task SetVerifyCode(string phone, long id) + public async Task SetVerifyCode(string phone, long id) { var operation = new OperationResult(); var account = _accountRepository.Get(id); @@ -492,11 +582,11 @@ public class AccountApplication : IAccountApplication _smsService.LoginSend(phone, r); //TimeSpan delay = TimeSpan.FromSeconds(30); - + await _accountRepository.RemoveCode(id); - + return operation.Succcedded(); - + } @@ -547,67 +637,67 @@ public class AccountApplication : IAccountApplication .Select(x => x.Code) .ToList(); - + _authHelper.SignOut(); var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname - , account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true",null); - var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim - { - PersonnelCount = x.PersonnelCount, - Id = x.Id, - Name = x.WorkshopFullName, - Slug = _passwordHasher.SlugHasher(x.Id) - }).OrderByDescending(x => x.PersonnelCount).ToList(); + , account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true", null); + var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim + { + PersonnelCount = x.PersonnelCount, + Id = x.Id, + Name = x.WorkshopFullName, + Slug = _passwordHasher.SlugHasher(x.Id) + }).OrderByDescending(x => x.PersonnelCount).ToList(); - authViewModel.WorkshopList = workshopList; + authViewModel.WorkshopList = workshopList; - var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); + var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); authViewModel.Permissions = clientPermissions; - if (authViewModel.WorkshopList.Any()) - { - var workshop = authViewModel.WorkshopList.First(); - authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); - authViewModel.WorkshopName = workshop.Name; + if (authViewModel.WorkshopList.Any()) + { + var workshop = authViewModel.WorkshopList.First(); + authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id); + authViewModel.WorkshopName = workshop.Name; authViewModel.WorkshopId = workshop.Id; - } - _authHelper.Signin(authViewModel); + } + _authHelper.Signin(authViewModel); return operation.Succcedded(2); } public OperationResult DirectCameraLogin(long cameraAccountId) { - var prAcc = _authHelper.CurrentAccountInfo(); - var operation = new OperationResult(); - var cameraAccount = _cameraAccountRepository.GetById(cameraAccountId); - if (cameraAccount == null) - return operation.Failed("این اکانت وجود ندارد"); + var prAcc = _authHelper.CurrentAccountInfo(); + var operation = new OperationResult(); + var cameraAccount = _cameraAccountRepository.GetById(cameraAccountId); + if (cameraAccount == null) + return operation.Failed("این اکانت وجود ندارد"); - _authHelper.SignOut(); + _authHelper.SignOut(); - var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; - var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, - cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting); - if (cameraAccount.IsActiveSting == "true") - { - _authHelper.CameraSignIn(authViewModel); - - } - else - { - return operation.Failed("این اکانت غیر فعال شده است"); - } - return operation.Succcedded(2); + var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; + var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, + cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting); + if (cameraAccount.IsActiveSting == "true") + { + _authHelper.CameraSignIn(authViewModel); + + } + else + { + return operation.Failed("این اکانت غیر فعال شده است"); + } + return operation.Succcedded(2); } - + public AccountLeftWorkViewModel WorkshopList(long accountId) { string fullname = this._accountRepository.GetById(accountId).Fullname; - List source =_accountLeftworkRepository.WorkshopList(accountId); + List source = _accountLeftworkRepository.WorkshopList(accountId); List userWorkshopIds = source.Select(x => x.WorkshopId).ToList(); List allWorkshops = this._accountLeftworkRepository.GetAllWorkshops(); List accountSelectList = this._accountRepository.GetAdminAccountSelectList(); @@ -690,65 +780,65 @@ public class AccountApplication : IAccountApplication #region Pooya public OperationResult IsPhoneNumberAndPasswordValid(long accountId, string phoneNumber, string password, string rePassword) { - OperationResult op = new(); + OperationResult op = new(); - var entity = _accountRepository.Get(accountId); + var entity = _accountRepository.Get(accountId); - if (entity == null) - return op.Failed(ApplicationMessages.RecordNotFound); + if (entity == null) + return op.Failed(ApplicationMessages.RecordNotFound); - if (!string.IsNullOrWhiteSpace(rePassword) || !string.IsNullOrWhiteSpace(password)) - { - if (rePassword != password) - return op.Failed("تکرار رمز عبور با رمز عبور مطابقت ندارد"); + if (!string.IsNullOrWhiteSpace(rePassword) || !string.IsNullOrWhiteSpace(password)) + { + if (rePassword != password) + return op.Failed("تکرار رمز عبور با رمز عبور مطابقت ندارد"); - if (password.Length < 8) - return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد"); - } + if (password.Length < 8) + return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد"); + } - if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) && string.IsNullOrWhiteSpace(rePassword)) - return op.Failed("چیزی برای تغییر وجود ندارد"); + if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) && string.IsNullOrWhiteSpace(rePassword)) + return op.Failed("چیزی برای تغییر وجود ندارد"); - if (!string.IsNullOrWhiteSpace(phoneNumber) && entity.Mobile != phoneNumber) - { - phoneNumber = phoneNumber.Trim(); - if (phoneNumber.Length != 11) - return op.Failed("شماره تلفن همراه به درستی وارد نشده است"); - if (_accountRepository.Exists(x => x.Mobile == phoneNumber && x.id != accountId) || - _subAccountRepository.Exists(x => x.PhoneNumber == phoneNumber) || - _cameraAccountRepository.Exists(x => x.Mobile == phoneNumber)) - return op.Failed("قبلا یک حساب با این شماره ثبت شده است"); - } + if (!string.IsNullOrWhiteSpace(phoneNumber) && entity.Mobile != phoneNumber) + { + phoneNumber = phoneNumber.Trim(); + if (phoneNumber.Length != 11) + return op.Failed("شماره تلفن همراه به درستی وارد نشده است"); + if (_accountRepository.Exists(x => x.Mobile == phoneNumber && x.id != accountId) || + _subAccountRepository.Exists(x => x.PhoneNumber == phoneNumber) || + _cameraAccountRepository.Exists(x => x.Mobile == phoneNumber)) + return op.Failed("قبلا یک حساب با این شماره ثبت شده است"); + } - return op.Succcedded(); - } + return op.Succcedded(); + } public OperationResult ChangePasswordAndPhoneNumber(AccountChangePasswordAndPhoneNumber command) { - OperationResult op = new(); - command.PhoneNumber = command.PhoneNumber.Trim(); - var entity = _accountRepository.Get(command.AccountId); - if (entity == null) - return op.Failed(ApplicationMessages.RecordNotFound); - var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password, command.RePassword); - if (validationResult.IsSuccedded == false) - return validationResult; + OperationResult op = new(); + command.PhoneNumber = command.PhoneNumber.Trim(); + var entity = _accountRepository.Get(command.AccountId); + if (entity == null) + return op.Failed(ApplicationMessages.RecordNotFound); + var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password, command.RePassword); + if (validationResult.IsSuccedded == false) + return validationResult; - if (!string.IsNullOrWhiteSpace(command.RePassword)) - { + if (!string.IsNullOrWhiteSpace(command.RePassword)) + { - entity.ChangePassword(_passwordHasher.Hash(command.Password)); - } + entity.ChangePassword(_passwordHasher.Hash(command.Password)); + } - if (!string.IsNullOrWhiteSpace(command.PhoneNumber)) - { - entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto, entity.RoleName); - } - _accountRepository.SaveChanges(); - return op.Succcedded(); - } + if (!string.IsNullOrWhiteSpace(command.PhoneNumber)) + { + entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto, entity.RoleName); + } + _accountRepository.SaveChanges(); + return op.Succcedded(); + } //public UserClaimsResponseDTO GetClaimsForSignIn(Login command) //{ // var operation = new OperationResult(); @@ -864,12 +954,12 @@ public class AccountApplication : IAccountApplication } (bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(cameraAccount.Password, request.Password); - + if (!result.Verified) throw new BadRequestException(ApplicationMessages.WrongUserPass); var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; - + var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting); diff --git a/AccountManagement.Application/RoleApplication.cs b/AccountManagement.Application/RoleApplication.cs index 02fa97e2..51d05489 100644 --- a/AccountManagement.Application/RoleApplication.cs +++ b/AccountManagement.Application/RoleApplication.cs @@ -6,6 +6,7 @@ using System.Linq; using AccountManagement.Application.Contracts.ProgramManagerApiResult; using AccountManagement.Domain.InternalApiCaller; using Company.Domain._common; +using AccountManagement.Application.Contracts.Ticket; namespace AccountManagement.Application; @@ -56,7 +57,7 @@ public class RoleApplication : IRoleApplication if (!response.Success) { _unitOfWork.RollbackAccountContext(); - return operation.Failed(response.Error); + return operation.Failed("ارتباط با اپلیکیش پروگرام منیجر برقرار نشد"); } if (!response.Result.isSuccess) @@ -93,37 +94,119 @@ public class RoleApplication : IRoleApplication _unitOfWork.BeginAccountContext(); role.Edit(command.Name, permissions); _roleRepository.SaveChanges(); + var key = SecretKeys.ProgramManagerInternalApi; var pmPermissions = command.PmPermissions.Where(x => x > 0).ToList(); + + + //یافتن نقش در پروگرام منیجر + var apiResult = InternalApiCaller.GetAsync( + "api/role", + key, + new Dictionary + { + { "RoleName", "" }, + + { "GozareshgirRoleId", command.Id} + } + ); + + + + if (apiResult.Success) + { + + if (apiResult.Result.isSuccess) + { + //اگر این نقش در پروگرام منیجر وجود داشت ویرایش کن + if (apiResult.Result.data.role.Any()) + { + var parameters = new CreateProgramManagerRole + { + RoleName = command.Name, + Permissions = pmPermissions, + GozareshgirRoleId = role.id + + }; + + var url = "api/role/edit"; + + + var response = InternalApiCaller.PostAsync( + url, + key, + parameters + ); + + + if (!response.Success) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed("ارتباط با اپلیکیش پروگرام منیجر برقرار نشد"); + } + + if (!response.Result.isSuccess) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Result.errorMessage); + } + } + else //اگر نقش در پروگرام منیجر وجود نداشت + { + + //اگر تیک پرمیشن های پروگرام منیجر زده شده + //این نقش را سمت پروگرام منیجر بساز + if (pmPermissions.Any()) + { + var parameters = new CreateProgramManagerRole + { + RoleName = command.Name, + Permissions = pmPermissions, + GozareshgirRoleId = role.id + + }; + + var url = "api/role"; + + + var response = InternalApiCaller.PostAsync( + url, + key, + parameters + ); + + + if (!response.Success) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed("ارتباط با اپلیکیش پروگرام منیجر برقرار نشد"); + } + + if (!response.Result.isSuccess) + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed(response.Result.errorMessage); + } + } + } + + } + else + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed("ارتباط با اپلیکیش پروگرام منیجر برقرار نشد"); + + } + + } + else + { + _unitOfWork.RollbackAccountContext(); + return operation.Failed("ارتباط با اپلیکیش پروگرام منیجر برقرار نشد"); + } + + - var parameters = new CreateProgramManagerRole - { - RoleName = command.Name, - Permissions = pmPermissions, - GozareshgirRoleId = role.id - - }; - - var url = "api/role/edit"; - var key = SecretKeys.ProgramManagerInternalApi; - - var response = InternalApiCaller.PostAsync( - url, - key, - parameters - ); - - - if (!response.Success) - { - _unitOfWork.RollbackAccountContext(); - return operation.Failed(response.Error); - } - - if (!response.Result.isSuccess) - { - _unitOfWork.RollbackAccountContext(); - return operation.Failed(response.Result.errorMessage); - } + diff --git a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Create.cshtml b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Create.cshtml index 53054659..4819c826 100644 --- a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Create.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Create.cshtml @@ -59,89 +59,134 @@ data-callback="" data-action="Refresh" enctype="multipart/form-data"> -