DbInstallCmd.cs 3.0 KB

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