@ -1,6 +1,7 @@
using System ;
using System ;
using System.Diagnostics ;
using System.Diagnostics ;
using System.IO ;
using System.IO ;
using System.Linq ;
using System.Runtime.InteropServices ;
using System.Runtime.InteropServices ;
using System.Text ;
using System.Text ;
using System.Text.Json ;
using System.Text.Json ;
@ -16,6 +17,7 @@ using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Building ;
using Volo.Abp.Cli.ProjectBuilding.Building ;
using Volo.Abp.Cli.ProjectBuilding.Templates.App ;
using Volo.Abp.Cli.ProjectBuilding.Templates.App ;
using Volo.Abp.Cli.ProjectBuilding.Templates.Console ;
using Volo.Abp.Cli.ProjectBuilding.Templates.Console ;
using Volo.Abp.Cli.ProjectModification ;
using Volo.Abp.Cli.Utils ;
using Volo.Abp.Cli.Utils ;
using Volo.Abp.DependencyInjection ;
using Volo.Abp.DependencyInjection ;
using Volo.Abp.Threading ;
using Volo.Abp.Threading ;
@ -24,14 +26,17 @@ namespace Volo.Abp.Cli.Commands
{
{
public class NewCommand : IConsoleCommand , ITransientDependency
public class NewCommand : IConsoleCommand , ITransientDependency
{
{
private readonly EfCoreMigrationRecreater _ efCoreMigrationRecreater ;
public ILogger < NewCommand > Logger { get ; set ; }
public ILogger < NewCommand > Logger { get ; set ; }
protected TemplateProjectBuilder TemplateProjectBuilder { get ; }
protected TemplateProjectBuilder TemplateProjectBuilder { get ; }
public ITemplateInfoProvider TemplateInfoProvider { get ; }
public ITemplateInfoProvider TemplateInfoProvider { get ; }
public NewCommand ( TemplateProjectBuilder templateProjectBuilder
public NewCommand ( TemplateProjectBuilder templateProjectBuilder
, ITemplateInfoProvider templateInfoProvider )
, ITemplateInfoProvider templateInfoProvider ,
EfCoreMigrationRecreater efCoreMigrationRecreater )
{
{
_ efCoreMigrationRecreater = efCoreMigrationRecreater ;
TemplateProjectBuilder = templateProjectBuilder ;
TemplateProjectBuilder = templateProjectBuilder ;
TemplateInfoProvider = templateInfoProvider ;
TemplateInfoProvider = templateInfoProvider ;
@ -84,22 +89,29 @@ namespace Volo.Abp.Cli.Commands
Logger . LogInformation ( "Database provider: " + databaseProvider ) ;
Logger . LogInformation ( "Database provider: " + databaseProvider ) ;
}
}
var connectionString = GetConnectionString ( commandLineArgs ) ;
if ( connectionString ! = null )
{
Logger . LogInformation ( "Connection string: " + connectionString ) ;
}
var databaseManagementSystem = GetDatabaseManagementSystem ( commandLineArgs ) ;
var databaseManagementSystem = GetDatabaseManagementSystem ( commandLineArgs ) ;
if ( databaseManagementSystem ! = DatabaseManagementSystem . NotSpecified )
if ( databaseManagementSystem ! = DatabaseManagementSystem . NotSpecified )
{
{
Logger . LogInformation ( "DBSM: " + databaseManagementSystem ) ;
Logger . LogInformation ( "DBMS : " + databaseManagementSystem ) ;
}
}
var uiFramework = GetUiFramework ( commandLineArgs ) ;
if ( databaseManagementSystem ! = DatabaseManagementSystem . NotSpecified
if ( uiFramework ! = UiFramework . NotSpecified )
& & databaseManagementSystem ! = DatabaseManagementSystem . SQLServer
& & connectionString = = null )
{
{
Logger . LogInformation ( "UI Framework: " + uiFramework ) ;
throw new CliUsageException ( $"Connection string must be set if a Database Management System other than SQLServer is set. Use \" - - { Options . ConnectionString . Long } \ " parameter to set connection string" ) ;
}
}
var connectionString = GetConnectionString ( commandLineArgs ) ;
var uiFramework = GetUiFramework ( commandLineArgs ) ;
if ( connectionString ! = null )
if ( uiFramework ! = UiFramework . NotSpecified )
{
{
Logger . LogInformation ( "Connection string: " + connectionString ) ;
Logger . LogInformation ( "UI Framework: " + uiFramework ) ;
}
}
var mobileApp = GetMobilePreference ( commandLineArgs ) ;
var mobileApp = GetMobilePreference ( commandLineArgs ) ;
@ -203,6 +215,8 @@ namespace Volo.Abp.Cli.Commands
}
}
}
}
ReCreateMigrationsIfNeeded ( databaseProvider , databaseManagementSystem , outputFolder ) ;
Logger . LogInformation ( $"'{projectName}' has been successfully created to '{outputFolder}'" ) ;
Logger . LogInformation ( $"'{projectName}' has been successfully created to '{outputFolder}'" ) ;
if ( AppTemplateBase . IsAppTemplate ( template ? ? ( await TemplateInfoProvider . GetDefaultAsync ( ) ) . Name ) )
if ( AppTemplateBase . IsAppTemplate ( template ? ? ( await TemplateInfoProvider . GetDefaultAsync ( ) ) . Name ) )
@ -212,6 +226,23 @@ namespace Volo.Abp.Cli.Commands
}
}
}
}
private void ReCreateMigrationsIfNeeded ( DatabaseProvider databaseProvider , DatabaseManagementSystem databaseManagementSystem , string outputFolder )
{
if ( databaseManagementSystem = = DatabaseManagementSystem . NotSpecified | | databaseManagementSystem = = DatabaseManagementSystem . SQLServer )
{
return ;
}
if ( databaseProvider ! = DatabaseProvider . NotSpecified & & databaseProvider ! = DatabaseProvider . EntityFrameworkCore )
{
return ;
}
Logger . LogInformation ( $"Re-creating migrations... ({databaseManagementSystem})" ) ;
_ efCoreMigrationRecreater . Recreate ( outputFolder ) ;
}
private void OpenThanksPage ( UiFramework uiFramework , DatabaseProvider databaseProvider , bool tiered , bool commercial )
private void OpenThanksPage ( UiFramework uiFramework , DatabaseProvider databaseProvider , bool tiered , bool commercial )
{
{
uiFramework = uiFramework = = UiFramework . NotSpecified | | uiFramework = = UiFramework . None ? UiFramework . Mvc : uiFramework ;
uiFramework = uiFramework = = UiFramework . NotSpecified | | uiFramework = = UiFramework . None ? UiFramework . Mvc : uiFramework ;
@ -274,7 +305,7 @@ namespace Volo.Abp.Cli.Commands
sb . AppendLine ( "-ts|--template-source <template-source> (your local or network abp template source)" ) ;
sb . AppendLine ( "-ts|--template-source <template-source> (your local or network abp template source)" ) ;
sb . AppendLine ( "-csf|--create-solution-folder (default: true)" ) ;
sb . AppendLine ( "-csf|--create-solution-folder (default: true)" ) ;
sb . AppendLine ( "-cs|--connection-string <connection-string> (your database connection string)" ) ;
sb . AppendLine ( "-cs|--connection-string <connection-string> (your database connection string)" ) ;
sb . AppendLine ( "--dbms <database-management-system> (your database management system)" ) ;
sb . AppendLine ( "--dbms <database-management-system> (your database management system. Requires --connection-string to be set )" ) ;
sb . AppendLine ( "--tiered (if supported by the template)" ) ;
sb . AppendLine ( "--tiered (if supported by the template)" ) ;
sb . AppendLine ( "--no-ui (if supported by the template)" ) ;
sb . AppendLine ( "--no-ui (if supported by the template)" ) ;
sb . AppendLine ( "--no-random-port (Use template's default ports)" ) ;
sb . AppendLine ( "--no-random-port (Use template's default ports)" ) ;
@ -297,7 +328,7 @@ namespace Volo.Abp.Cli.Commands
sb . AppendLine ( " abp new Acme.BookStore -ts \"D:\\localTemplate\\abp\"" ) ;
sb . AppendLine ( " abp new Acme.BookStore -ts \"D:\\localTemplate\\abp\"" ) ;
sb . AppendLine ( " abp new Acme.BookStore -csf false" ) ;
sb . AppendLine ( " abp new Acme.BookStore -csf false" ) ;
sb . AppendLine ( " abp new Acme.BookStore --local-framework-ref --abp-path \"D:\\github\\abp\"" ) ;
sb . AppendLine ( " abp new Acme.BookStore --local-framework-ref --abp-path \"D:\\github\\abp\"" ) ;
sb . AppendLine ( " abp new Acme.BookStore --dbms mysql" ) ;
sb . AppendLine ( " abp new Acme.BookStore --dbms mysql --connection-string \"Server=myServerName\\myInstanceName;Database=myDatabase;User Id=myUsername;Password=myPassword\" " ) ;
sb . AppendLine ( " abp new Acme.BookStore --connection-string \"Server=myServerName\\myInstanceName;Database=myDatabase;User Id=myUsername;Password=myPassword\"" ) ;
sb . AppendLine ( " abp new Acme.BookStore --connection-string \"Server=myServerName\\myInstanceName;Database=myDatabase;User Id=myUsername;Password=myPassword\"" ) ;
sb . AppendLine ( "" ) ;
sb . AppendLine ( "" ) ;
sb . AppendLine ( "See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI" ) ;
sb . AppendLine ( "See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI" ) ;
@ -326,7 +357,7 @@ namespace Volo.Abp.Cli.Commands
protected virtual DatabaseManagementSystem GetDatabaseManagementSystem ( CommandLineArgs commandLineArgs )
protected virtual DatabaseManagementSystem GetDatabaseManagementSystem ( CommandLineArgs commandLineArgs )
{
{
var optionValue = commandLineArgs . Options . GetOrNull ( Options . DatabaseManagementSystem . Long ) ;
var optionValue = commandLineArgs . Options . GetOrNull ( Options . DatabaseManagementSystem . Short , Options . DatabaseManagementSystem . Long ) ;
if ( optionValue = = null )
if ( optionValue = = null )
{
{
@ -343,6 +374,8 @@ namespace Volo.Abp.Cli.Commands
return DatabaseManagementSystem . PostgreSQL ;
return DatabaseManagementSystem . PostgreSQL ;
case "oracle" :
case "oracle" :
return DatabaseManagementSystem . Oracle ;
return DatabaseManagementSystem . Oracle ;
case "oracle-devart" :
return DatabaseManagementSystem . OracleDevart ;
case "sqlite" :
case "sqlite" :
return DatabaseManagementSystem . SQLite ;
return DatabaseManagementSystem . SQLite ;
default :
default :
@ -399,7 +432,8 @@ namespace Volo.Abp.Cli.Commands
public static class DatabaseManagementSystem
public static class DatabaseManagementSystem
{
{
public const string Long = "dbsm" ;
public const string Short = "dbms" ;
public const string Long = "database-management-system" ;
}
}
public static class OutputFolder
public static class OutputFolder