Skip to content

Commit

Permalink
Bug 7179: Org dereg job - Not deleting the registry contacts changes …
Browse files Browse the repository at this point in the history
…done.
  • Loading branch information
madhumathivenkatesan-bc committed Dec 20, 2023
1 parent 2838f01 commit 3c48de4
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 53 deletions.
1 change: 1 addition & 0 deletions api/CcsSso.Core.Domain/Constants/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ public enum WrapperApi
Organisation,
OrganisationDelete,
Contact,
ContactDelete,
Security,
User,
Cii
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public interface IWrapperContactService
#region Organisation Contact
Task<bool> DeleteOrganisationContactAsync(string organisationId, int contactId);
Task<OrganisationContactInfoList> GetOrganisationContactListAsync(string organisationId);
Task DeleteOrganisationRegistryContactAsync(string organisationId);
#endregion
}
}
1 change: 1 addition & 0 deletions api/CcsSso.Core.Domain/Jobs/AppSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public class WrapperApiSettings
public string ConfigApiKey { get; set; }
public string OrgApiKey { get; set; }
public string OrgDeleteApiKey { get; set; }
public string RegistryContactDeleteApiKey { get; set; }
public string UserApiKey { get; set; }
public string SecurityApiKey { get; set; }
public string ContactApiKey { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ public async Task DeleteOrganisationAsync(string ciiOrganisationId)

// Deleting Organisation Contact points

var deleteContactSuccess = await DeleteOrgContacts(ciiOrganisationId);
var deleteUsersSuccess = await DeleteOrgUsers(ciiOrganisationId);
await DeleteOrgUsers(ciiOrganisationId);
await DeleteOrgContacts(ciiOrganisationId);

await Task.Delay(1000);

Expand Down Expand Up @@ -236,66 +236,83 @@ private async Task<List<UserListInfo>> GetOrganisationAdmins(string CiiOrganisat
return orgAdmins?.UserList;
}

private async Task<bool> DeleteOrgUsers(string ciiOrgId)
private async Task DeleteOrgUsers(string ciiOrgId)
{
Console.WriteLine($"********* Start Deleting org users ***********************");

var filter = new UserFilterCriteria
{
isAdmin = false,
includeSelf = true,
includeUnverifiedAdmin = true,
isDelegatedExpiredOnly = false,
isDelegatedOnly = false,
searchString = String.Empty
};

var orgUsers = await _wrapperUserService.GetUserByOrganisation(ciiOrgId, filter);
Console.WriteLine($"********* Total org user found: {orgUsers?.UserList.Count()} ***********************");

List<Task> usersToDelete = new();
List<Task> usersDeleteCache = new();
orgUsers.UserList.ForEach(user =>
try
{
usersToDelete.Add(_wrapperUserService.DeleteAdminUserAsync(user.UserName));
usersDeleteCache.Add(_cacheInvalidateService.RemoveUserCacheValuesOnDeleteAsync(user.UserName, ciiOrgId, new List<int>()));
});
Console.WriteLine($"********* Start Deleting org users ***********************");

var deleteUserSuccess = Task.WhenAll(usersToDelete);
var deleteUserCacheSuccess = Task.WhenAll(usersDeleteCache);
var filter = new UserFilterCriteria
{
isAdmin = false,
includeSelf = true,
includeUnverifiedAdmin = true,
isDelegatedExpiredOnly = false,
isDelegatedOnly = false,
searchString = String.Empty
};

Console.WriteLine($"********* Deleting org users successful. ***********************");
var orgUsers = await _wrapperUserService.GetUserByOrganisation(ciiOrgId, filter);
Console.WriteLine($"********* Total org user found: {orgUsers?.UserList.Count()} ***********************");

return deleteUserSuccess.IsCompletedSuccessfully;
List<Task> usersToDelete = new();
List<Task> usersDeleteCache = new();
var usersLists = orgUsers.UserList;
if (usersLists.Any())
{
foreach (var user in usersLists)
{
await _wrapperUserService.DeleteAdminUserAsync(user.UserName);
await _cacheInvalidateService.RemoveUserCacheValuesOnDeleteAsync(user.UserName, ciiOrgId, new List<int>());
}
}

Console.WriteLine($"********* Deleting org users successful. ***********************");
}
catch(Exception ex)
{
Console.WriteLine($"********* Deleting org users fail Message{ex.Message}. ***********************");
}
//return deleteUserSuccess.IsCompletedSuccessfully;
}

private async Task<bool> DeleteOrgContacts(string ciiOrgId)
private async Task DeleteOrgContacts(string ciiOrgId)
{
Console.WriteLine($"********* Start Deleting org contacts ***********************");
var contactDetails = await _wrapperContactService.GetOrganisationContactListAsync(ciiOrgId);

if (contactDetails != null && contactDetails.ContactPoints.Any())
try
{
Console.WriteLine($"********* Contacts found {contactDetails.ContactPoints.Count()} ***********************");
List<Task> deleteContactList = new();
contactDetails.ContactPoints.ForEach(cp =>
Console.WriteLine($"********* Start Deleting org contacts ***********************");
var contactDetails = await _wrapperContactService.GetOrganisationContactListAsync(ciiOrgId);

if (contactDetails != null && contactDetails.ContactPoints.Any())
{
deleteContactList.Add(_wrapperContactService.DeleteOrganisationContactAsync(ciiOrgId, cp.ContactPointId));
//cp.Contacts.ForEach(async p =>
//{
// deleteContactList.Add(_wrapperContactService.DeleteOrganisationContactAsync(ciiOrgId, p.ContactId));
//});
});

var deleteContactSuccess = Task.WhenAll(deleteContactList);
var orgContactPointIds = contactDetails.ContactPoints.Select(cp => cp.ContactPointId).ToList<int>();
await _cacheInvalidateService.RemoveOrganisationCacheValuesOnDeleteAsync(ciiOrgId, orgContactPointIds, new Dictionary<string, List<int>>());

Console.WriteLine($"********* Deleting org contacts successful. ***********************");
return deleteContactSuccess.IsCompletedSuccessfully;
Console.WriteLine($"********* Contacts found {contactDetails.ContactPoints.Count()} ***********************");
var contacts = contactDetails.ContactPoints.OrderByDescending(item => item.ContactPointId).ToList();
if (contacts.Any())
{
foreach (var contact in contacts)
{

if(contact.ContactPointReason != "REGISTRY")
{
await _wrapperContactService.DeleteOrganisationContactAsync(ciiOrgId, contact.ContactPointId);
}
else
{
await _wrapperContactService.DeleteOrganisationRegistryContactAsync(ciiOrgId);
}
}
}

var orgContactPointIds = contactDetails.ContactPoints.Select(cp => cp.ContactPointId).ToList<int>();
await _cacheInvalidateService.RemoveOrganisationCacheValuesOnDeleteAsync(ciiOrgId, orgContactPointIds, new Dictionary<string, List<int>>());

Console.WriteLine($"********* Deleting org contacts successful. ***********************");
}
}
catch (Exception ex)
{
Console.WriteLine($"********* Deleting org contacts failed Message{ex.Message}. ***********************");
}

return true;
}
}
}
6 changes: 6 additions & 0 deletions api/CcsSso.Core.JobScheduler/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ public static IHostBuilder CreateHostBuilder(string[] args) =>
OrgApiKey = wrapperApiSettings.OrgApiKey,
OrgDeleteApiKey = wrapperApiSettings.OrgDeleteApiKey,
ContactApiKey = wrapperApiSettings.ContactApiKey,
RegistryContactDeleteApiKey = wrapperApiSettings.RegistryContactDeleteApiKey,
ApiGatewayDisabledConfigUrl = wrapperApiSettings.ApiGatewayDisabledConfigUrl,
ApiGatewayDisabledOrgUrl = wrapperApiSettings.ApiGatewayDisabledOrgUrl,
ApiGatewayEnabledConfigUrl = wrapperApiSettings.ApiGatewayEnabledConfigUrl,
Expand Down Expand Up @@ -300,6 +301,11 @@ private static void ConfigureHttpClients(IServiceCollection services, CiiSetting
c.BaseAddress = new Uri(isApiGatewayEnabled ? _wrapperApiSettings.ApiGatewayEnabledOrgUrl : _wrapperApiSettings.ApiGatewayDisabledOrgUrl);
c.DefaultRequestHeaders.Add("x-api-key", _wrapperApiSettings.OrgDeleteApiKey);
});
services.AddHttpClient("ContactWrapperDeleteApi", c =>
{
c.BaseAddress = new Uri(isApiGatewayEnabled ? _wrapperApiSettings.ApiGatewayEnabledContactUrl : _wrapperApiSettings.ApiGatewayDisabledContactUrl);
c.DefaultRequestHeaders.Add("x-api-key", _wrapperApiSettings.RegistryContactDeleteApiKey);
});
// Question about security wrapper api settings where to place these settings.
services.AddHttpClient("SecurityWrapperApi", c =>
{
Expand Down
1 change: 1 addition & 0 deletions api/CcsSso.Core.JobScheduler/ProgramHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public dynamic FillAwsParamsValue(Type objType, List<Parameter> parameters)
ConfigApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/ConfigApiKey"),
OrgApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/OrgApiKey"),
OrgDeleteApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/OrgDeleteApiKey"),
RegistryContactDeleteApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/RegistryContactDeleteApiKey"),
UserApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/UserApiKey"),
ContactApiKey = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/ContactApiKey"),
ApiGatewayEnabledConfigUrl = _awsParameterStoreService.FindParameterByName(parameters, path + "WrapperApiSettings/ApiGatewayEnabledConfigUrl"),
Expand Down
1 change: 1 addition & 0 deletions api/CcsSso.Core.JobScheduler/appsecrets.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
"OrgDeleteApiKey": "",
"UserApiKey": "",
"ContactApiKey": "",
"RegistryContactDeleteApiKey": "",
"ApiGatewayEnabledUserUrl": "",
"ApiGatewayEnabledConfigUrl": "",
"ApiGatewayEnabledOrgUrl": "",
Expand Down
3 changes: 2 additions & 1 deletion api/CcsSso.Core.Service/Wrapper/WrapperApiService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,8 @@ private HttpClient GetHttpClient(WrapperApi wrapperApi)
WrapperApi.OrganisationDelete => "OrgWrapperDeleteApi",
WrapperApi.Configuration => "ConfigWrapperApi",
WrapperApi.Contact => "ContactWrapperApi",
WrapperApi.User => "UserWrapperApi",
WrapperApi.ContactDelete => "ContactWrapperDeleteApi",
WrapperApi.User => "UserWrapperApi",
_ => "SecurityWrapperApi"
};
var client = _httpClientFactory.CreateClient(clientName);
Expand Down
5 changes: 4 additions & 1 deletion api/CcsSso.Core.Service/Wrapper/WrapperContactService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ public async Task<OrganisationContactInfoList> GetOrganisationContactListAsync(s
{
return await _wrapperApiService.GetAsync<OrganisationContactInfoList>(WrapperApi.Contact, $"organisations/{organisationId}/contacts", "", "ERROR_GETTING_ORGANISATION_CONTACTS");
}

public async Task DeleteOrganisationRegistryContactAsync(string organisationId)
{
await _wrapperApiService.DeleteAsync(WrapperApi.ContactDelete, $"organisations/{organisationId}/registry-contact", "ERROR_DELETING_ORGANISATION_REGISTRY_CONTACT");
}
#endregion
}
}

0 comments on commit 3c48de4

Please sign in to comment.