Skip to content

Commit

Permalink
Merge pull request #136 from UKGovernmentBEIS/develop
Browse files Browse the repository at this point in the history
Dev -> Staging
  • Loading branch information
Glenn-Clarke authored Dec 2, 2024
2 parents 119c397 + 252827c commit aabb70b
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 3 deletions.
24 changes: 24 additions & 0 deletions HerPortal.ManagementShell/AdminAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,4 +154,28 @@ public IEnumerable<string> GetConsortiumCodesUserShouldOwn(User user)
kvp.Value.All(custodianCode => userCustodianCodes.Contains(custodianCode)))
.Select(kvp => kvp.Key);
}

public void AddMissingAuthoritiesToDatabase()
{
var custodianCodesMissingFromDatabase = GetCustodianCodesMissingFromDatabase().ToList();
var consortiumCodesMissingFromDatabase = GetConsortiumCodesMissingFromDatabase().ToList();

dbOperation.CreateLasAndConsortia(custodianCodesMissingFromDatabase, consortiumCodesMissingFromDatabase);
}

public IEnumerable<string> GetCustodianCodesMissingFromDatabase()
{
var custodianCodesInCode = LocalAuthorityData.LocalAuthorityNamesByCustodianCode.Keys;
var custodianCodesInDatabase = dbOperation.GetAllLas().Select(la => la.CustodianCode);

return custodianCodesInCode.Except(custodianCodesInDatabase);
}

public IEnumerable<string> GetConsortiumCodesMissingFromDatabase()
{
var consortiumCodesInCode = ConsortiumData.ConsortiumNamesByConsortiumCode.Keys;
var consortiumCodesInDatabase = dbOperation.GetAllConsortia().Select(consortia => consortia.ConsortiumCode);

return consortiumCodesInCode.Except(consortiumCodesInDatabase);
}
}
36 changes: 36 additions & 0 deletions HerPortal.ManagementShell/CommandHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,42 @@ public void FixAllUserOwnedConsortia()
outputProvider.Output("Migration complete.");
}

public void AddAllMissingAuthoritiesToDatabase()
{
outputProvider.Output("!!! Database Local Authority Population Script !!!");
outputProvider.Output(
"This script will ensure the database has an entry for every Local Authority & Consortium present in LocalAuthorityData or ConsortiumData.");
outputProvider.Output("Use after adding a new Local Authority or Consortium to the code.");

var custodianCodesMissingFromDatabase = adminAction.GetCustodianCodesMissingFromDatabase().ToList();
var consortiumCodesMissingFromDatabase = adminAction.GetConsortiumCodesMissingFromDatabase().ToList();

if (custodianCodesMissingFromDatabase.Count == 0 && consortiumCodesMissingFromDatabase.Count == 0)
{
outputProvider.Output("No changes needed.");
return;
}

if (custodianCodesMissingFromDatabase.Count > 0)
{
outputProvider.Output("The following Local Authorities will be added to the database:");
PrintCodes(custodianCodesMissingFromDatabase, code => custodianCodeToLaNameDict[code]);
}

if (consortiumCodesMissingFromDatabase.Count > 0)
{
outputProvider.Output("The following Consortia will be added to the database:");
PrintCodes(consortiumCodesMissingFromDatabase, code => consortiumCodeToConsortiumNameDict[code]);
}

var confirmation = outputProvider.Confirm("Okay to proceed? (Y/N)");

if (confirmation)
adminAction.AddMissingAuthoritiesToDatabase();
else
outputProvider.Output("No changes made.");
}

private void OutputCouldNotFindAuthorityException(string wrapperMessage,
CouldNotFindAuthorityException couldNotFindAuthorityException)
{
Expand Down
36 changes: 34 additions & 2 deletions HerPortal.ManagementShell/DatabaseOperation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public List<LocalAuthority> GetLas(IReadOnlyCollection<string> custodianCodes)
custodianCodes.SingleOrDefault(code => !dbContext.LocalAuthorities.Any(la => la.CustodianCode == code),
null);
if (missingCustodianCode != null)
throw new CouldNotFindAuthorityException("Could not find Custodian Code in database.", new List<string> {missingCustodianCode});
throw new CouldNotFindAuthorityException("Could not find Custodian Code in database.",
new List<string> { missingCustodianCode });

return custodianCodes
.Select(code => dbContext.LocalAuthorities
Expand All @@ -44,7 +45,8 @@ public List<Consortium> GetConsortia(IReadOnlyCollection<string> consortiumCodes
var missingConsortiumCode =
consortiumCodes.SingleOrDefault(code => !dbContext.Consortia.Any(la => la.ConsortiumCode == code), null);
if (missingConsortiumCode != null)
throw new CouldNotFindAuthorityException("Could not find Consortium Code in database.", new List<string> {missingConsortiumCode});
throw new CouldNotFindAuthorityException("Could not find Consortium Code in database.",
new List<string> { missingConsortiumCode });

return consortiumCodes
.Select(code => dbContext.Consortia
Expand Down Expand Up @@ -137,6 +139,36 @@ public void AddConsortiaToUser(User user, List<Consortium> consortia)
});
}

public IEnumerable<LocalAuthority> GetAllLas()
{
return dbContext.LocalAuthorities;
}

public IEnumerable<Consortium> GetAllConsortia()
{
return dbContext.Consortia;
}

public void CreateLasAndConsortia(IEnumerable<string> custodianCodes, IEnumerable<string> consortiumCodes)
{
var las = custodianCodes.Select(custodianCode => new LocalAuthority
{
CustodianCode = custodianCode,
Users = []
}).ToList();
var consortia = consortiumCodes.Select(consortiumCode => new Consortium
{
ConsortiumCode = consortiumCode,
Users = []
}).ToList();

PerformTransaction(() =>
{
dbContext.LocalAuthorities.AddRange(las);
dbContext.Consortia.AddRange(consortia);
});
}

private void PerformTransaction(Action transaction)
{
using var dbContextTransaction = dbContext.Database.BeginTransaction();
Expand Down
3 changes: 3 additions & 0 deletions HerPortal.ManagementShell/IDatabaseOperation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ public void AddConsortiaAndRemoveLasFromUser(User user, List<Consortium> consort
List<LocalAuthority> localAuthorities);

public void RemoveConsortiaFromUser(User user, List<Consortium> consortia);
public IEnumerable<LocalAuthority> GetAllLas();
public IEnumerable<Consortium> GetAllConsortia();
public void CreateLasAndConsortia(IEnumerable<string> custodianCodes, IEnumerable<string> consortiumCodes);
}
6 changes: 5 additions & 1 deletion HerPortal.ManagementShell/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ public static void Main(string[] args)
case Subcommand.FixAllUserOwnedConsortia:
commandHandler.FixAllUserOwnedConsortia();
break;
case Subcommand.AddAllMissingAuthoritiesToDatabase:
commandHandler.AddAllMissingAuthoritiesToDatabase();
break;
default:
outputProvider.Output("Invalid terminal command entered. Please refer to the documentation");
return;
Expand All @@ -82,6 +85,7 @@ private enum Subcommand
RemoveUser,
AddConsortia,
RemoveConsortia,
FixAllUserOwnedConsortia
FixAllUserOwnedConsortia,
AddAllMissingAuthoritiesToDatabase
}
}

0 comments on commit aabb70b

Please sign in to comment.