public async Task <HmrSystemUser> CreateUserAsync(UserCreateDto user, BceidAccount account) { var userEntity = new HmrSystemUser { Username = account.Username.ToUpperInvariant(), UserGuid = account.UserGuid, BusinessGuid = account.BusinessGuid, BusinessLegalName = account.BusinessLegalName, UserType = account.UserType, FirstName = account.FirstName, LastName = account.LastName, Email = account.Email, EndDate = user.EndDate, UserDirectory = user.UserDirectory }; if (account.UserType != UserTypeDto.INTERNAL) { var partyEntity = _partyRepo.GetPartyEntityByGuid(account.BusinessGuid); if (partyEntity == null) { userEntity.Party = new HmrParty { BusinessGuid = account.BusinessGuid, BusinessLegalName = account.BusinessLegalName?.Trim(), BusinessNumber = account.BusinessNumber, DisplayName = account.DisplayName?.Trim() }; } else { userEntity.PartyId = partyEntity.PartyId; } } foreach (var areaNumber in user.ServiceAreaNumbers) { userEntity.HmrServiceAreaUsers .Add(new HmrServiceAreaUser { ServiceAreaNumber = areaNumber }); } foreach (var roleId in user.UserRoleIds) { userEntity.HmrUserRoles .Add(new HmrUserRole { RoleId = roleId });; } await DbSet.AddAsync(userEntity); return(userEntity); }
/// <summary> /// This method can be called concurrently by a typical client which asynchronously calls APIs /// In order to avoid unecessary multiple updates and the concurrency control number exception, /// it runs SQL with optimistic concurrency control. /// </summary> /// <param name="user"></param> /// <param name="concurrencyControlNumber"></param> /// <returns></returns> public async Task UpdateUserFromBceidAsync(BceidAccount user, long concurrencyControlNumber) { var sql = new StringBuilder("UPDATE HMR_SYSTEM_USER SET "); sql.Append("USERNAME = {0}, "); sql.Append("FIRST_NAME = {1}, "); sql.Append("LAST_NAME = {2}, "); sql.Append("EMAIL = {3}, "); sql.Append("CONCURRENCY_CONTROL_NUMBER = CONCURRENCY_CONTROL_NUMBER + 1 "); sql.Append("WHERE USER_GUID = {4} AND CONCURRENCY_CONTROL_NUMBER = {5} "); await DbContext.Database.ExecuteSqlRawAsync(sql.ToString(), user.Username, user.FirstName, user.LastName, user.Email, user.UserGuid, concurrencyControlNumber); }
public async Task <(string Error, BceidAccount account)> GetBceidAccountAsync(string username, string userType) { var typeCode = userType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business; var request = new AccountDetailRequest(); request.requesterAccountTypeCode = typeCode; request.requesterUserId = _client.ClientCredentials.UserName.UserName; request.accountTypeCode = BCeIDAccountTypeCode.Business; request.userId = username; request.onlineServiceId = _client.Osid; var response = await _client.getAccountDetailAsync(request); if (response.code != ResponseCode.Success) { return(response.message, null); } else if (response.failureCode == FailureCode.NoResults) { return("", null); } var account = new BceidAccount(); account.Username = response.account.userId.value; account.UserGuid = new Guid(response.account.guid.value); account.UserType = userType; if (!account.UserType.IsBusinessUser()) { account.BusinessGuid = new Guid(response.account.business.guid.value); account.BusinessLegalName = response.account.business.legalName.value; account.BusinessNumber = Convert.ToDecimal(response.account.business.businessNumber.value); account.DisplayName = response.account.business.doingBusinessAs.value; } else { account.DisplayName = response.account.displayName.value; } account.FirstName = response.account.individualIdentity.name.firstname.value; account.LastName = response.account.individualIdentity.name.surname.value; account.Email = response.account.contact.email.value; return("", account); }
private async Task <(string error, BceidAccount account)> GetBceidAccountAsync(Guid?userGuid, string username, string userType, string requestorGuid, string requestorType) { var targetTypeCode = userType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business; var requesterTypeCode = requestorType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business; var request = new AccountDetailRequest(); request.requesterAccountTypeCode = requesterTypeCode; request.requesterUserGuid = requestorGuid; request.accountTypeCode = targetTypeCode; //ISA - for IDIR, only IDIR search is allowed if (userType.IsIdirUser()) { request.userId = username; } else if (userGuid != null) { request.userGuid = userGuid?.ToString("N"); } else { request.userId = username; } request.onlineServiceId = _client.Osid; var response = await _client.getAccountDetailAsync(request); if (response.code != ResponseCode.Success) { return(response.message, null); } else if (response.failureCode == FailureCode.NoResults) { return("", null); } var account = new BceidAccount(); account.Username = response.account.userId.value; account.UserGuid = userGuid ?? new Guid(response.account.guid.value); account.UserType = userType; if (account.UserType.IsBusinessUser()) { account.BusinessGuid = new Guid(response.account.business.guid.value); account.BusinessLegalName = response.account.business.legalName.value; var doingBusinessAs = response.account.business.doingBusinessAs.value; account.DoingBusinessAs = doingBusinessAs.IsEmpty() ? account.BusinessLegalName : doingBusinessAs; var businessNumber = response.account.business.businessNumber.value; account.BusinessNumber = businessNumber.IsEmpty() ? 0 : Convert.ToDecimal(businessNumber); } account.DisplayName = response.account.displayName.value; account.FirstName = response.account.individualIdentity.name.firstname.value; account.LastName = response.account.individualIdentity.name.surname.value; account.Email = response.account.contact.email.value; return("", account); }