ScenarioManager.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Microsoft.EntityFrameworkCore;
  2. using Waaagh.Models;
  3. using Waaagh.Services.Abstract;
  4. namespace Waaagh.Services {
  5. internal class ScenarioManager: IScenarioManager {
  6. private readonly IDbContextFactory<AppDatabaseContext> AppDatabaseContextFactory;
  7. public ScenarioManager(IDbContextFactory<AppDatabaseContext> dbContextFactory) {
  8. AppDatabaseContextFactory = dbContextFactory;
  9. using AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext();
  10. foreach (Scenario scenario in dbContext.Scenarios) {
  11. }
  12. }
  13. private Dictionary<string, Scenario> Scenarios { get; }
  14. #region IScenarioManager
  15. public bool AddScenario(Scenario scenario) {
  16. string name = scenario.Name;
  17. if (Scenarios.TryAdd(name, scenario) == false) {
  18. Scenarios[name].UpdateReferences(scenario);
  19. }
  20. return true;
  21. }
  22. public bool TryAddScenario(Scenario scenario) {
  23. string name = scenario.Name;
  24. return Scenarios.TryAdd(name, scenario);
  25. }
  26. public bool RemoveScenario(string name) {
  27. return Scenarios.Remove(name);
  28. }
  29. public int SaveAll() {
  30. int count = 0;
  31. AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext();
  32. int toSaveIndex = 0;
  33. List<Scenario> toSaveList = Scenarios.Values.ToList();
  34. foreach (Scenario scenario in dbContext.Scenarios) {
  35. while (toSaveList[toSaveIndex].IsLegacy == true) {
  36. ++toSaveIndex;
  37. }
  38. Scenario toSaveScenario = toSaveList[toSaveIndex];
  39. if (toSaveScenario.Id == scenario.Id) {
  40. // Update
  41. }
  42. else {
  43. // Insert
  44. }
  45. }
  46. dbContext.SaveChanges();
  47. return count;
  48. }
  49. public int ReloadAll() {
  50. int legacyCount = 0;
  51. foreach (Scenario scenario in Scenarios.Values) {
  52. scenario.IsLegacy = true;
  53. ++legacyCount;
  54. }
  55. AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext();
  56. foreach (Scenario scenario in dbContext.Scenarios) {
  57. scenario.IsLegacy = false;
  58. string name = scenario.Name;
  59. if (Scenarios.ContainsKey(name) == true) {
  60. Scenarios[name].UpdateReferences(scenario);
  61. }
  62. else {
  63. Scenarios.Add(name, scenario);
  64. }
  65. }
  66. return Scenarios.Count() - legacyCount;
  67. }
  68. #endregion
  69. }
  70. }