using Microsoft.Data.SqlClient; 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.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..."); var resultCode = Constants.ReturnCodes.Ok; try { if (!context.Database.EnsureCreated()) { WriteInfo("Database already exists."); resultCode = Constants.Commands.DbInstall.ReturnCodes.DatabaseExists; } else { WriteWarning("Database created."); } if (_isLatestUpdateEnabled) { WriteInfo("Checking pending migrations."); if (CheckPendingMigrations(context)) { WriteInfo("New pending migrations detected."); ApplyMigration(context); } else { WriteInfo("Nothing found."); } } } catch (SqlException e) { return HandleConnectionException(e); } return new Result(resultCode); } #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 } }