Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

staging -> main #137

Merged
merged 4 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.");
Comment on lines +212 to +215
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ifs without braces always make me scared. Any chance we could add some in here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

linter requirement alas

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤨
I would turn off that rule in the linter rather than follow it personally. I realise I'm not the actual TL for the project but in my opinion this rule is only leaving yourself open to potential bugs in the future.

Copy link
Contributor Author

@samyou-softwire samyou-softwire Dec 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps; the linter rules are not something we've reviewed much before, so can raise a ticket for this. it'd need some work to ensure we're using the same rules for everyone, right now we all agree to use rider's default

can raise a ticket for this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For what it's worth I agree with this

}

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
}
}
Loading