diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs index 107dc2d21d..1e11ecb2f9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs @@ -278,7 +278,7 @@ public class AbpIoSourceCodeStore : ISourceCodeStore, ITransientDependency } var matches = Regex.Matches(stringBuilder.ToString(), - $"({AppTemplate.TemplateName}|{AppProTemplate.TemplateName}|{ModuleTemplate.TemplateName}|{ModuleProTemplate.TemplateName}|{ConsoleTemplate.TemplateName}|{WpfTemplate.TemplateName})-(.+).zip"); + $"({AppTemplate.TemplateName}|{AppNoLayersTemplate.TemplateName}|{AppProTemplate.TemplateName}|{ModuleTemplate.TemplateName}|{ModuleProTemplate.TemplateName}|{ConsoleTemplate.TemplateName}|{WpfTemplate.TemplateName})-(.+).zip"); foreach (Match match in matches) { templateList.Add((match.Groups[1].Value, match.Groups[2].Value)); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs index b1c1674ae0..8e1504fb8f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs @@ -52,6 +52,8 @@ public class TemplateInfoProvider : ITemplateInfoProvider, ITransientDependency { case AppTemplate.TemplateName: return new AppTemplate(); + case AppNoLayersTemplate.TemplateName: + return new AppNoLayersTemplate(); case AppProTemplate.TemplateName: return new AppProTemplate(); case MicroserviceProTemplate.TemplateName: diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplate.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplate.cs new file mode 100644 index 0000000000..b409c4e202 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplate.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using Volo.Abp.Cli.ProjectBuilding.Building; + +namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; + +public class AppNoLayersTemplate : AppTemplateBase +{ + /// + /// "app-nolayers". + /// + public const string TemplateName = "app-nolayers"; + + public AppNoLayersTemplate() + : base(TemplateName) + { + //TODO: Change URL + DocumentUrl = CliConsts.DocsLink + "/en/abp/latest/Startup-Templates/Application"; + } + + public override IEnumerable GetCustomSteps(ProjectBuildContext context) + { + var steps = new List(); + + RandomizeSslPorts(context, steps); + RandomizeStringEncryption(context, steps); + + return steps; + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 7ce9730e23..7d4aab5615 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -43,7 +43,7 @@ public abstract class AppTemplateBase : TemplateInfo return steps; } - private void ConfigureTenantSchema(ProjectBuildContext context, List steps) + protected void ConfigureTenantSchema(ProjectBuildContext context, List steps) { if (context.BuildArgs.ExtraProperties.ContainsKey("separate-tenant-schema")) { @@ -71,7 +71,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private void SwitchDatabaseProvider(ProjectBuildContext context, List steps) + protected void SwitchDatabaseProvider(ProjectBuildContext context, List steps) { if (context.BuildArgs.DatabaseProvider == DatabaseProvider.MongoDb) { @@ -105,7 +105,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void DeleteUnrelatedProjects(ProjectBuildContext context, List steps) + protected void DeleteUnrelatedProjects(ProjectBuildContext context, List steps) { switch (context.BuildArgs.UiFramework) { @@ -170,7 +170,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private void ConfigurePublicWebSite(ProjectBuildContext context, List steps) + protected void ConfigurePublicWebSite(ProjectBuildContext context, List steps) { if (!context.BuildArgs.PublicWebSite) { @@ -206,7 +206,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps) + protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps) { var adminCmsPackageInstalledProjectsPackageJsonFiles = new List { @@ -233,7 +233,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) + protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) { @@ -243,7 +243,7 @@ public abstract class AppTemplateBase : TemplateInfo return SemanticVersion.Parse(context.BuildArgs.Version) > SemanticVersion.Parse("4.2.9"); } - private static void ConfigureWithoutUi(ProjectBuildContext context, List steps) + protected void ConfigureWithoutUi(ProjectBuildContext context, List steps) { steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host")); @@ -263,7 +263,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void ConfigureWithBlazorUi(ProjectBuildContext context, List steps) + protected void ConfigureWithBlazorUi(ProjectBuildContext context, List steps) { context.Symbols.Add("ui:blazor"); @@ -286,7 +286,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void ConfigureWithBlazorServerUi(ProjectBuildContext context, List steps) + protected void ConfigureWithBlazorServerUi(ProjectBuildContext context, List steps) { context.Symbols.Add("ui:blazor-server"); @@ -312,7 +312,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void ConfigureWithMvcUi(ProjectBuildContext context, List steps) + protected void ConfigureWithMvcUi(ProjectBuildContext context, List steps) { context.Symbols.Add("ui:mvc"); @@ -334,7 +334,7 @@ public abstract class AppTemplateBase : TemplateInfo steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds")); } - private static void ConfigureWithAngularUi(ProjectBuildContext context, List steps) + protected void ConfigureWithAngularUi(ProjectBuildContext context, List steps) { context.Symbols.Add("ui:angular"); @@ -362,12 +362,12 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void RemoveUnnecessaryPorts(ProjectBuildContext context, List steps) + protected void RemoveUnnecessaryPorts(ProjectBuildContext context, List steps) { steps.Add(new RemoveUnnecessaryPortsStep()); } - private static void RandomizeSslPorts(ProjectBuildContext context, List steps) + protected void RandomizeSslPorts(ProjectBuildContext context, List steps) { if (context.BuildArgs.ExtraProperties.ContainsKey("no-random-port")) { @@ -388,7 +388,7 @@ public abstract class AppTemplateBase : TemplateInfo ); } - private void ConfigureTieredArchitecture(ProjectBuildContext context, List steps) + protected void ConfigureTieredArchitecture(ProjectBuildContext context, List steps) { if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) || context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server")) @@ -397,17 +397,17 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void RandomizeStringEncryption(ProjectBuildContext context, List steps) + protected void RandomizeStringEncryption(ProjectBuildContext context, List steps) { steps.Add(new RandomizeStringEncryptionStep()); } - private static void UpdateNuGetConfig(ProjectBuildContext context, List steps) + protected void UpdateNuGetConfig(ProjectBuildContext context, List steps) { steps.Add(new UpdateNuGetConfigStep("/aspnet-core/NuGet.Config")); } - private void RemoveMigrations(ProjectBuildContext context, List steps) + protected void RemoveMigrations(ProjectBuildContext context, List steps) { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version) || SemanticVersion.Parse(context.BuildArgs.Version) > new SemanticVersion(4, 1, 99)) @@ -425,7 +425,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void ChangeConnectionString(ProjectBuildContext context, List steps) + protected void ChangeConnectionString(ProjectBuildContext context, List steps) { if (context.BuildArgs.ConnectionString != null) { @@ -433,7 +433,7 @@ public abstract class AppTemplateBase : TemplateInfo } } - private static void CleanupFolderHierarchy(ProjectBuildContext context, List steps) + protected void CleanupFolderHierarchy(ProjectBuildContext context, List steps) { if ((context.BuildArgs.UiFramework == UiFramework.Mvc || context.BuildArgs.UiFramework == UiFramework.Blazor diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Data/DataSeederMiddleware.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Data/DataSeederMiddleware.cs index 1f909094fb..eede958c44 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Data/DataSeederMiddleware.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Data/DataSeederMiddleware.cs @@ -2,46 +2,47 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Identity; -namespace MyCompanyName.MyProjectName.Data +namespace MyCompanyName.MyProjectName.Data; + +public class DataSeederMiddleware : IMiddleware, ISingletonDependency { - public class DataSeederMiddleware : IMiddleware, ISingletonDependency - { - private bool _hostSeeded; + private bool _hostSeeded; - private readonly ILogger _logger; - private readonly IDataSeeder _dataSeeder; + private readonly ILogger _logger; + private readonly IDataSeeder _dataSeeder; - public DataSeederMiddleware( - ILogger logger, - IDataSeeder dataSeeder) - { - _logger = logger; - _dataSeeder = dataSeeder; - } + public DataSeederMiddleware( + ILogger logger, + IDataSeeder dataSeeder) + { + _logger = logger; + _dataSeeder = dataSeeder; + } - public async Task InvokeAsync(HttpContext context, RequestDelegate next) + public async Task InvokeAsync(HttpContext context, RequestDelegate next) + { + /* This logic is not safe if you are running multiple instances of your + * application in parallel. In that case, a distributed lock usage is suggested, + * or you can create another application for database migration/seed. + */ + if (!_hostSeeded) { - /* This logic is not safe if you are running multiple instances of your - * application in parallel. In that case, a distributed lock usage is suggested, - * or you can create another application for database migration/seed. - */ - if (!_hostSeeded) - { - await SeedHostDataAsync(); - _hostSeeded = true; - } - - await next(context); + await SeedHostDataAsync(); + _hostSeeded = true; } - private Task SeedHostDataAsync() - { - _logger.LogInformation($"Executing database seed..."); - - return _dataSeeder.SeedAsync(new DataSeedContext() - .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, IdentityDataSeedContributor.AdminEmailDefaultValue) - .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, IdentityDataSeedContributor.AdminPasswordDefaultValue) - ); - } + await next(context); + } + + private Task SeedHostDataAsync() + { + _logger.LogInformation($"Executing database seed..."); + + return _dataSeeder.SeedAsync(new DataSeedContext() + .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, + IdentityDataSeedContributor.AdminEmailDefaultValue) + .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, + IdentityDataSeedContributor.AdminPasswordDefaultValue) + ); } } diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Data/MyProjectNameDbContext.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Data/MyProjectNameDbContext.cs index 37fe8eda88..6265e8ebba 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Data/MyProjectNameDbContext.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Data/MyProjectNameDbContext.cs @@ -1,7 +1,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.IdentityServer.EntityFrameworkCore; @@ -31,7 +30,7 @@ public class MyProjectNameDbContext : AbpDbContext builder.ConfigureIdentityServer(); builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); - + /* Configure your own entities here */ } -} \ No newline at end of file +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ar.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ar.json new file mode 100644 index 0000000000..9fe7e951d9 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ar.json @@ -0,0 +1,7 @@ +{ + "culture": "ar", + "texts": { + "Welcome_Title": "مرحبا", + "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/cs.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/cs.json new file mode 100644 index 0000000000..d45dfff9a0 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/cs.json @@ -0,0 +1,7 @@ +{ + "culture": "cs", + "texts": { + "Welcome_Title": "Vítejte", + "Welcome_Text": "Toto je minimalistická šablona pro spuštění aplikace s jednou vrstvou pro ABP Framework." + } +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/de-DE.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/de-DE.json new file mode 100644 index 0000000000..e325aa3949 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "Welcome_Title": "Willkommen", + "Welcome_Text": "Dies ist eine minimalistische, einschichtige Anwendungsstartvorlage für das ABP-Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/en-GB.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/en-GB.json new file mode 100644 index 0000000000..30407ce214 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "Welcome_Title": "Welcome_Title", + "Welcome_Text": "This is a minimalist, single layer application startup template for the ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/es.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/es.json new file mode 100644 index 0000000000..dbc2280cdc --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "Welcome_Title": "Bienvenido", + "Welcome_Text": "Esta es una plantilla de inicio de aplicación minimalista de una sola capa para ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fi.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fi.json new file mode 100644 index 0000000000..96f8386846 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fi.json @@ -0,0 +1,7 @@ +{ + "culture": "fi", + "texts": { + "Welcome_Title": "Tervetuloa", + "Welcome_Text": "Tämä on minimalistinen yksikerroksinen sovelluksen käynnistysmalli ABP Frameworkille." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fr.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fr.json new file mode 100644 index 0000000000..6148d1fa13 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "Welcome_Title": "Bienvenue", + "Welcome_Text": "Il s'agit d'un modèle de démarrage d'application minimaliste à une seule couche pour le cadre ABP." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hi.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hi.json new file mode 100644 index 0000000000..c741e93703 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hi.json @@ -0,0 +1,7 @@ +{ + "culture": "hi", + "texts": { + "Welcome_Title": "स्वागत हे", + "Welcome_Text": "यह एबीपी फ्रेमवर्क के लिए एक न्यूनतम, सिंगल लेयर एप्लिकेशन स्टार्टअप टेम्प्लेट है।" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hu.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hu.json new file mode 100644 index 0000000000..cf9f2e7b09 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/hu.json @@ -0,0 +1,7 @@ +{ + "culture": "hu", + "texts": { + "Welcome_Title": "Üdvözlöm", + "Welcome_Text": "Ez egy minimalista, egyrétegű alkalmazásindítási sablon az ABP-keretrendszerhez." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/is.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/is.json new file mode 100644 index 0000000000..41b8ed6afb --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/is.json @@ -0,0 +1,7 @@ +{ + "culture": "is", + "texts": { + "Welcome_Title": "Velkomin", + "Welcome_Text": "Þetta er lægstur, eins lags ræsingarsniðmát fyrir ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/it.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/it.json new file mode 100644 index 0000000000..8722bc73c1 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/it.json @@ -0,0 +1,7 @@ +{ + "culture": "it", + "texts": { + "Welcome_Title": "Benvenuto", + "Welcome_Text": "Questo è un modello di avvio dell'applicazione minimalista a livello singolo per ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/nl.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/nl.json new file mode 100644 index 0000000000..e798081c42 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "Welcome_Title": "Welkom", + "Welcome_Text": "Dit is een minimalistische, enkellaagse applicatie-opstartsjabloon voor het ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pl-PL.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pl-PL.json new file mode 100644 index 0000000000..ba7c3764ee --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pl-PL.json @@ -0,0 +1,7 @@ +{ + "culture": "pl-PL", + "texts": { + "Welcome_Title": "Witaj", + "Welcome_Text": "Jest to minimalistyczny, jednowarstwowy szablon uruchamiania aplikacji dla ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pt-BR.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pt-BR.json new file mode 100644 index 0000000000..1e45a233c9 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/pt-BR.json @@ -0,0 +1,7 @@ +{ + "culture": "pt-BR", + "texts": { + "Welcome_Title": "Seja bem-vindo!", + "Welcome_Text": "Este é um modelo de inicialização de aplicativo de camada única minimalista para o ABP Framework." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ro-RO.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ro-RO.json new file mode 100644 index 0000000000..bd31e2cbd6 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ro-RO.json @@ -0,0 +1,7 @@ +{ + "culture": "ro-RO", + "texts": { + "Welcome_Title": "Bun venit", + "Welcome_Text": "Acesta este un șablon de pornire a aplicației minimaliste, cu un singur strat, pentru Cadrul ABP." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ru.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ru.json new file mode 100644 index 0000000000..82ed95eaf8 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/ru.json @@ -0,0 +1,7 @@ +{ + "culture": "ru", + "texts": { + "Welcome_Title": "Bine ati venit", + "Welcome_Text": "Acesta este un șablon de pornire a aplicației minimaliste, cu un singur strat, pentru Cadrul ABP." + } +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sk.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sk.json new file mode 100644 index 0000000000..cdaf8e7c3d --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sk.json @@ -0,0 +1,7 @@ +{ + "culture": "sk", + "texts": { + "Welcome_Title": "Vitajte", + "Welcome_Text": "Toto je minimalistická šablóna na spustenie aplikácie s jednou vrstvou pre rámec ABP." + } +} \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sl.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sl.json new file mode 100644 index 0000000000..5d595a4910 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/sl.json @@ -0,0 +1,7 @@ +{ + "culture": "sl", + "texts": { + "Welcome_Title": "Dobrodošli", + "Welcome_Text": "To je minimalistična enoslojna predloga za zagon aplikacije za ABP Framework." + } +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/vi.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/vi.json new file mode 100644 index 0000000000..9e61a67f6c --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/vi.json @@ -0,0 +1,7 @@ +{ + "culture": "vi", + "texts": { + "Welcome_Title": "Chào mừng bạn", + "Welcome_Text": "Đây là một mẫu khởi động ứng dụng lớp đơn, tối giản cho ABP Framework." + } +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hans.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hans.json new file mode 100644 index 0000000000..c0dcb66f0a --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hans", + "texts": { + "Welcome_Title": "欢迎", + "Welcome_Text": "这是ABP框架的极简单层应用程序启动模板." + } + } \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hant.json b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hant.json new file mode 100644 index 0000000000..fe347fedb9 --- /dev/null +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Localization/MyProjectName/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "Welcome_Title": "歡迎", + "Welcome_Text": "這是 ABP 框架的極簡單層應用程序啟動模板." + } + } \ No newline at end of file diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.Designer.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.Designer.cs rename to templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.Designer.cs index 9a08b50fb6..606c549e29 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.Designer.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20220116184845_Initial")] + [Migration("20220119015238_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -100,16 +100,28 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("ImpersonatorTenantId"); + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + b.Property("ImpersonatorUserId") .HasColumnType("uniqueidentifier") .HasColumnName("ImpersonatorUserId"); + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); b.Property("TenantName") - .HasColumnType("nvarchar(max)"); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); b.Property("Url") .HasMaxLength(256) diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.cs similarity index 99% rename from templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.cs rename to templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.cs index abec77f8c4..61dd143293 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220116184845_Initial.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/20220119015238_Initial.cs @@ -18,9 +18,11 @@ namespace MyCompanyName.MyProjectName.Migrations UserId = table.Column(type: "uniqueidentifier", nullable: true), UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), TenantId = table.Column(type: "uniqueidentifier", nullable: true), - TenantName = table.Column(type: "nvarchar(max)", nullable: true), + TenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), ImpersonatorUserId = table.Column(type: "uniqueidentifier", nullable: true), + ImpersonatorUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), ImpersonatorTenantId = table.Column(type: "uniqueidentifier", nullable: true), + ImpersonatorTenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), ExecutionTime = table.Column(type: "datetime2", nullable: false), ExecutionDuration = table.Column(type: "int", nullable: false), ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/MyProjectNameDbContextModelSnapshot.cs index 49e87cea80..af4ba29c12 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -98,16 +98,28 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("ImpersonatorTenantId"); + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + b.Property("ImpersonatorUserId") .HasColumnType("uniqueidentifier") .HasColumnName("ImpersonatorUserId"); + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); b.Property("TenantName") - .HasColumnType("nvarchar(max)"); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); b.Property("Url") .HasMaxLength(256) diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj b/templates/app-nolayers/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj index 7bc10614ab..da71f5a49f 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj @@ -10,72 +10,72 @@ - + - - - - - - - + + + + + + + - - - + + + - + - - - - - + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + runtime; build; native; contentfiles; analyzers compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native @@ -85,7 +85,7 @@ - + diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/MyProjectNameModule.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/MyProjectNameModule.cs index 8df496e37f..f9bc05c940 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/MyProjectNameModule.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/MyProjectNameModule.cs @@ -53,39 +53,39 @@ namespace MyCompanyName.MyProjectName; typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - + // Account module packages typeof(AbpAccountApplicationModule), typeof(AbpAccountHttpApiModule), typeof(AbpAccountWebIdentityServerModule), - + // Identity module packages typeof(AbpIdentityApplicationModule), typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpIdentityServerEntityFrameworkCoreModule), typeof(AbpIdentityWebModule), - + // Audit logging module packages typeof(AbpAuditLoggingEntityFrameworkCoreModule), - + // Permission Management module packages typeof(AbpPermissionManagementApplicationModule), typeof(AbpPermissionManagementHttpApiModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), - + // Tenant Management module packages typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpTenantManagementWebModule), - + // Feature Management module packages typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementHttpApiModule), typeof(AbpFeatureManagementWebModule), - + // Setting Management module packages typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), @@ -96,7 +96,7 @@ public class MyProjectNameModule : AbpModule { /* Single point to enable/disable multi-tenancy */ private const bool IsMultiTenant = true; - + public override void PreConfigureServices(ServiceConfigurationContext context) { context.Services.PreConfigure(options => @@ -154,7 +154,7 @@ public class MyProjectNameModule : AbpModule ); }); } - + private void ConfigureAuthentication(IServiceCollection services, IConfiguration configuration) { services.AddAuthentication() @@ -176,9 +176,26 @@ public class MyProjectNameModule : AbpModule .AddVirtualJson("/Localization/MyProjectName"); options.DefaultResourceType = typeof(MyProjectNameResource); - + options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); + options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); + options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); + options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); + options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish")); + options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); + options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); + options.Languages.Add(new LanguageInfo("is", "is", "Icelandic", "is")); + options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); + options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); + options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); + options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de")); + options.Languages.Add(new LanguageInfo("es", "es", "Español")); }); Configure(options => @@ -242,7 +259,7 @@ public class MyProjectNameModule : AbpModule */ options.AddDefaultRepositories(includeAllEntities: true); }); - + Configure(options => { options.Configure(configurationContext => @@ -275,24 +292,24 @@ public class MyProjectNameModule : AbpModule app.UseRouting(); app.UseAuthentication(); app.UseJwtTokenMiddleware(); - + if (IsMultiTenant) { app.UseMultiTenancy(); } - + app.UseUnitOfWork(); app.UseIdentityServer(); app.UseAuthorization(); - + app.UseSwagger(); app.UseAbpSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); - + app.UseAuditing(); app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} \ No newline at end of file +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Program.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Program.cs index 9983a19631..87d4d61515 100644 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Program.cs +++ b/templates/app-nolayers/MyCompanyName.MyProjectName/Program.cs @@ -5,32 +5,45 @@ namespace MyCompanyName.MyProjectName; public class Program { - public static int Main(string[] args) + public async static Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG - .MinimumLevel.Debug() + .MinimumLevel.Debug() #else - .MinimumLevel.Information() + .MinimumLevel.Information() #endif - .MinimumLevel.Override("Microsoft", LogEventLevel.Information) - .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) - .Enrich.FromLogContext() - .WriteTo.Async(c => c.File("Logs/logs.txt")) + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) #if DEBUG - .WriteTo.Async(c => c.Console()) + .WriteTo.Async(c => c.Console()) #endif - .CreateLogger(); + .CreateLogger(); try { - Log.Information("Starting web host."); - CreateHostBuilder(args).Build().Run(); + var builder = WebApplication.CreateBuilder(args); + builder.Host.AddAppSettingsSecretsJson() + .UseAutofac() + .UseSerilog(); + await builder.AddApplicationAsync(); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + + Log.Information("Starting MyCompanyName.MyProjectName."); + await app.RunAsync(); return 0; } catch (Exception ex) { - Log.Fatal(ex, "Host terminated unexpectedly!"); + if (ex.GetType().Name.Equals("StopTheHostException", StringComparison.Ordinal)) + { + throw; + } + + Log.Fatal(ex, "MyCompanyName.MyProjectName terminated unexpectedly!"); return 1; } finally @@ -38,14 +51,4 @@ public class Program Log.CloseAndFlush(); } } - - internal static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .AddAppSettingsSecretsJson() - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }) - .UseAutofac() - .UseSerilog(); -} \ No newline at end of file +} diff --git a/templates/app-nolayers/MyCompanyName.MyProjectName/Startup.cs b/templates/app-nolayers/MyCompanyName.MyProjectName/Startup.cs deleted file mode 100644 index f767d6482d..0000000000 --- a/templates/app-nolayers/MyCompanyName.MyProjectName/Startup.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MyCompanyName.MyProjectName; - -public class Startup -{ - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app) - { - app.InitializeApplication(); - } -} \ No newline at end of file