DbInstallCmd.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using Microsoft.Data.SqlClient;
  2. using Microsoft.EntityFrameworkCore;
  3. using Quadarax.Application.QLiberace.Console.Commands.Base;
  4. using Quadarax.Foundation.Core.Data.Interface.Domain;
  5. using Quadarax.Foundation.Core.QConsole.Attributes;
  6. using Quadarax.Foundation.Core.QConsole;
  7. using Quadarax.Foundation.Core.QConsole.Argument;
  8. using Quadarax.Foundation.Core.Value;
  9. namespace Quadarax.Application.QLiberace.Console.Commands
  10. {
  11. [CommandDefinition]
  12. internal class DbInstallCmd : DbMigrationCommand
  13. {
  14. #region *** Properties ***
  15. public override string Name => Constants.Commands.DbInstall.Name;
  16. public override string Description => Constants.Commands.DbInstall.Description;
  17. #endregion
  18. #region *** Fields ***
  19. private bool _isLatestUpdateEnabled;
  20. #endregion
  21. #region *** Constructor ***
  22. public DbInstallCmd(Engine engine) : base(engine)
  23. {
  24. }
  25. #endregion
  26. #region *** EXECUTE ***
  27. protected override Result OnExecute(IDomainContextResolver resolver)
  28. {
  29. var resultCode = Constants.ReturnCodes.Ok;
  30. foreach (var contextCode in resolver.RegisteredContexts)
  31. {
  32. var context = (DbContext)resolver.Get(contextCode);
  33. WriteInfo($"Ensuring database [{context.Database.GetDbConnection().Database}]...");
  34. try
  35. {
  36. if (!context.Database.EnsureCreated())
  37. {
  38. WriteInfo("Database already exists.");
  39. resultCode = Constants.Commands.DbInstall.ReturnCodes.DatabaseExists;
  40. }
  41. else
  42. {
  43. WriteWarning("Database created.");
  44. }
  45. if (_isLatestUpdateEnabled)
  46. {
  47. WriteInfo("Checking pending migrations.");
  48. if (CheckPendingMigrations(context))
  49. {
  50. WriteInfo("New pending migrations detected.");
  51. ApplyMigration(context);
  52. }
  53. else
  54. {
  55. WriteInfo("Nothing found.");
  56. }
  57. }
  58. }
  59. catch (SqlException e)
  60. {
  61. return HandleConnectionException(e);
  62. }
  63. }
  64. return new Result(resultCode);
  65. }
  66. #endregion
  67. #region *** Private operations ***
  68. protected override void OnValidateArguments()
  69. {
  70. base.OnValidateArguments();
  71. if (ContainsArgument(Constants.Commands.DbInstall.Arguments.Latest.Name))
  72. _isLatestUpdateEnabled = GetArgumentValueOrDefault<bool>(Constants.Commands.DbInstall.Arguments.Latest.Name);
  73. }
  74. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  75. {
  76. var arguments = new List<AbstractArgument>(base.OnSetupArguments());
  77. arguments.Add(new FlagArgument(Constants.Commands.DbInstall.Arguments.Latest.Name,
  78. Constants.Commands.DbInstall.Arguments.Latest.Description,
  79. Constants.Commands.DbInstall.Arguments.Latest.Hint, false));
  80. return arguments;
  81. }
  82. #endregion
  83. }
  84. }