using Quadarax.Application.QLiberace.Base; using Quadarax.Application.QLiberace.Console.Commands.Base; using Quadarax.Foundation.Core.QConsole.Attributes; using Quadarax.Foundation.Core.QConsole; using Quadarax.Foundation.Core.QConsole.Argument; using Quadarax.Foundation.Core.QConsole.Value; using Quadarax.Foundation.Core.Value; namespace Quadarax.Application.QLiberace.Console.Commands { [CommandDefinition] internal class DbInstallCmd : DbMigrationCommand { #region *** Properties *** public override string Name => Constants.Commands.DbInstall.Name; public override string Description => Constants.Commands.DbInstall.Description; #endregion #region *** Fields *** private bool _isLatestUpdateEnabled; #endregion #region *** Constructor *** public DbInstallCmd(Engine engine) : base(engine) { } #endregion #region *** EXECUTE *** protected override Result OnExecute(QlbrcDbContext context) { WriteInfo("Ensuring database..."); if (context.Database.EnsureCreated()) WriteInfo("Database already exists."); else WriteInfo("Database created."); if (_isLatestUpdateEnabled) { WriteInfo("Checking pending migrations."); if (CheckPendingMigrations(context)) { WriteInfo("New pending migrations detected."); ApplyMigration(context); } else { WriteInfo("Nothing found."); } } return new Result(); } #endregion #region *** Private operations *** protected override void OnValidateArguments() { base.OnValidateArguments(); if (ContainsArgument(Constants.Commands.DbInstall.Arguments.Latest.Name)) _isLatestUpdateEnabled = GetArgumentValueOrDefault(Constants.Commands.DbInstall.Arguments.Latest.Name); } protected override IEnumerable OnSetupArguments() { var arguments = new List(base.OnSetupArguments()); arguments.Add(new FlagArgument(Constants.Commands.DbInstall.Arguments.Latest.Name, Constants.Commands.DbInstall.Arguments.Latest.Description, Constants.Commands.DbInstall.Arguments.Latest.Hint, false)); return arguments; } #endregion } }